我很困惑N
vector::reserve(N)
是它期望在当前矢量大小或矢量的总空间之上添加的元素数量。
例如
#include <iostream>
#include <vector>
int main()
{
std::vector<int> foo;
foo.reserve(3);
foo.push_back(1);
foo.push_back(2);
foo.push_back(3);
foo.reserve(foo.size() + 2);// Should this be foo.reserve(2)?
foo.push_back(4);
foo.push_back(5);
}
foo.reserve(foo.size() + 2)
应该只是foo.reserve(2)
吗?
将矢量的容量增加到大于或等于 new_cap 的值。如果new_cap大于当前容量((,则分配新的存储,否则该方法不执行任何操作。
从此处的文档可以清楚地看出它是总大小。
你应该调用foo.reserve(foo.size() + 2)
,参见[vector.capacity](强调是我的(:
效果:通知向量计划的大小更改的指令,以便它可以相应地管理存储分配。 在
reserve()
之后,如果发生重新分配,capacity()
大于或等于reserve
的参数;否则等于之前的capacity()
值。 此时发生重新分配,当且仅当当前容量小于reserve()
的参数时。 如果引发异常不是由非 Cpp17CopyInsertable 类型的移动构造函数引发的,则不会产生任何影响。
参数需要foo.size() + 2
。 引用 cpp 首选项
[
reserve
将]将向量的容量增加到大于或等于new_cap的值。