控制 std::向量重新分配

Control over std::vector reallocation

本文关键字:分配 std 向量 控制 新分配      更新时间:2023-10-16

通过阅读std::vector参考,我明白

  1. 在达到最大容量时调用insert将导致重新分配std::vector(导致迭代器失效),因为为其分配了具有更大容量的新内存。目标是保持对连续数据的保证。

  2. 只要我坚持在最大容量以下insert就不会导致这种情况(并且迭代器将完好无损)。

我的问题如下:

reserveinsert自动调用时,有没有办法控制必须保留多少新内存?

假设我有一个初始容量为 100 的向量,当达到最大容量时,我想额外分配 20 个字节。

有可能做到吗?

您可以随时自己跟踪它并在分配之前调用储备,例如

static const int N = 20 // Amount to grow by
if (vec.capacity() == vec.size()) {
  vec.reserve(vec.size() + N);
}
vec.insert(...);

您可以将其包装在自己的函数中并调用该函数,而不是直接调用insert()