4

通过阅读std::vector参考资料,我了解到

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

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

我的问题如下:

什么时候reserve被 自动调用insert,有没有办法控制必须保留多少新内存?

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

有可能这样做吗?

4

1 回答 1

5

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

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

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

于 2012-06-02T10:16:44.487 回答