控制 std::向量重新分配
Control over std::vector reallocation
通过阅读std::vector
参考,我明白
-
在达到最大容量时调用
insert
将导致重新分配std::vector
(导致迭代器失效),因为为其分配了具有更大容量的新内存。目标是保持对连续数据的保证。 -
只要我坚持在最大容量以下
insert
就不会导致这种情况(并且迭代器将完好无损)。
我的问题如下:
当reserve
被insert
自动调用时,有没有办法控制必须保留多少新内存?
假设我有一个初始容量为 100 的向量,当达到最大容量时,我想额外分配 20 个字节。
有可能做到吗?
您可以随时自己跟踪它并在分配之前调用储备,例如
static const int N = 20 // Amount to grow by
if (vec.capacity() == vec.size()) {
vec.reserve(vec.size() + N);
}
vec.insert(...);
您可以将其包装在自己的函数中并调用该函数,而不是直接调用insert()
。
相关文章:
- C++ 使用枚举类对象分配 std::map 值
- 如何在 C++11 的内存池中分配 std::map 的内部RB_tree节点?
- 分配 std::函数会导致段错误
- 我可以在堆栈上分配`std :: array`阵列,而不知道编译时大小
- 有条件地分配 std::string 作为引用
- 分配std :: vector元素的两种方法
- 为缓存分配 std::shared_ptr 的集合
- 在 c++ 中填充和分配 std::string
- 正确分配 std::vector
- 从函数结果中分配 std::shared_ptr 的一行是什么?
- 分配std::vector数组会减慢后续计算的速度
- 在结构中分配std::字符串时出现分段错误
- 尝试使用 std::bind 重新分配 std::function 并得到错误"attempting to reference a deleted function"
- 重新分配 std::clog 时退出时 SEGV
- 在 std::vector 中重新分配 std::vector,在 std::vector.reserve() 之后
- 没有可行的重载"="来分配 std::function 回调作为成员函数
- 动态分配std::string数组
- 重新创建(重新分配)std::shared_ptr或std::unique_ptr
- 分配std::string时出现分段错误
- 用std::矢量迭代器分配std::字符串在一个项目中会导致调试错误,但在另一个项目却能正常工作