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

Cas*_*sey 7 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!
}
Run Code Online (Sandbox Code Playgroud)

前面提到的for循环运行正好零次,bar.size()返回零.我不记得所有其他STL容器是否也是如此,但如果是这样,包括std :: vector的行为:为什么?

Dav*_*ing 15

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


Dav*_*own 7

reserve改变向量的容量,而不是大小.你可能想要resize


小智 7

vector::reserve()改变矢量的容量,而不是它的大小.

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