据我所知,C++不支持C语言中的“realloc(void *, size_t)”这样的运算符。
但是,std::vector 应该有一个缓冲区来包含数据,并且应该扩展或压缩该缓冲区。
那么如何在没有“realloc”函数的情况下调整 std::vector 缓冲区的大小呢?
是否可以通过分配新的缓冲区、复制或移动所有元素并销毁以前的缓冲区来完成?我认为这是低效的。
据我所知,C++不支持像“realloc(void *, size_t)”这样的运算符
C++ 确实有std::realloc. 但它不(通常?)用于实现向量的大小调整。
那么如何在没有“realloc”函数的情况下调整 std::vector 缓冲区的大小呢?
使用以下算法:
是否可以通过分配新的缓冲区、复制或移动所有元素并销毁以前的缓冲区来完成?
是的。
我认为这是低效的。
你为什么这么认为?正是如此realloc。 当然,有时realloc可能能够根据内存布局跳过复制,而向量通常不能。与手动动态数组相比,这是矢量的一个不幸的缺点,但它不一定是一个显着的缺点。malloc
有人建议向标准分配器添加重新分配支持,如果采用标准分配器,将允许进行相同的优化:http://open-std.org/JTC1/SC22/WG21/docs/papers/2019/p0894r1.md
| 归档时间: |
|
| 查看次数: |
2229 次 |
| 最近记录: |