C ++:std :: vector :: reserve在包含指针时不保留

时间:2012-04-03 00:25:18

标签: c++ stdvector

当标识符类型为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的行为: 为什么?

3 个答案:

答案 0 :(得分:15)

.reserve()不会更改向量的大小。您正在寻找的成员函数是.resize()。 reserve()只是一种优化。如果你要使用push_back()逐个向向量添加一堆东西,然后告诉它使用reserve()添加多少可以使代码运行得更快一点。但只是调用reserve()不会改变大小。

答案 1 :(得分:7)

reserve更改了向量的容量,而不是大小。您可能需要resize

答案 2 :(得分:7)

vector::reserve()更改了向量的容量,而不是大小

capacity是内部分配了多少内存来保存向量的元素。 size是向量实际拥有的元素数量。 vector::resize()影响后者。