繁体   English   中英

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

[英]C++: std::vector::reserve not reserving when containing pointers

当标识符为std::vector<Foo*> reserve(...)类型时,我调用std::vector::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的行为, 为什么?

.reserve()不会更改向量的大小。 您要查找的成员函数是.resize()。 reserve()只是一种优化。 如果要使用push_back()将一堆东西添加到矢量中,然后使用reserve()告诉它要添加多少东西,则可以使代码运行更快。 但是,仅调用reserve()不会更改大小。

reserve更改矢量的容量,而不更改大小。 您可能想要resize

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM