我很困惑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)
吗?
答案 0 :(得分:5)
将向量的容量增加到大于或等于new_cap的值。如果new_cap大于当前的Capacity(),则分配新的存储,否则该方法不执行任何操作。
从文档here中可以明显看出,这是总大小。
答案 1 :(得分:2)
您应该致电git add .
,请参阅[vector.capacity](强调是我的):
效果:该指令将向量的计划大小更改通知向量,以便可以相应地管理存储分配。 在
foo.reserve(foo.size() + 2)
之后,如果发生重新分配,则reserve()
大于或等于capacity()
的参数; ,否则等于reserve
的先前值。 当且仅当当前容量小于capacity()
的自变量时,才发生重新分配。 如果不是由非 Cpp17CopyInsertable 类型的move构造函数引发异常,则没有任何效果。
答案 2 :(得分:2)
自变量必须为foo.size() + 2
。引用cppreference
[{
reserve
将]将向量的容量增加到大于或等于 new_cap 的值。