当标识符类型为std::vector::reserve
std::vector<Foo*>
时,我致电reserve(...)
时无效:
std::vector<int*> bar;
bar.reserve(20);
//I expect bar.size to return 20...
std::size_t sz = bar.size();
for(std::size_t i = 0; i < sz; ++i) {
//Do Stuff to all items!
}
上述for
循环正好运行零次,bar.size()返回零。我不记得所有其他STL容器是否也是如此,但如果是这样,包括std :: vector的行为: 为什么?
答案 0 :(得分:15)
.reserve()不会更改向量的大小。您正在寻找的成员函数是.resize()。 reserve()只是一种优化。如果你要使用push_back()逐个向向量添加一堆东西,然后告诉它使用reserve()添加多少可以使代码运行得更快一点。但只是调用reserve()不会改变大小。
答案 1 :(得分:7)
答案 2 :(得分:7)
vector::reserve()
更改了向量的容量,而不是大小。
capacity
是内部分配了多少内存来保存向量的元素。 size
是向量实际拥有的元素数量。 vector::resize()
影响后者。