通过阅读我理解的std::vector
参考
当达到最大容量时调用insert
将导致重新分配std::vector
(导致迭代器失效),因为为其分配了更大容量的新内存。目标是保证对连续数据的保证。
只要我低于最大容量insert
就不会导致(并且迭代器将完好无损)。
我的问题如下:
reserve
自动调用insert
时,有没有办法控制必须保留多少新内存?
假设我有一个初始容量为100的向量,当达到最大容量时,我想分配额外的20个字节。
有可能吗?
答案 0 :(得分:5)
您可以随时自行跟踪并在分配之前调用预留,例如
static const int N = 20 // Amount to grow by
if (vec.capacity() == vec.size()) {
vec.reserve(vec.size() + N);
}
vec.insert(...);
您可以将它包装在您自己的函数中并调用该函数,而不是直接调用insert()
。