[英]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()不会更改大小。
vector::reserve()
更改矢量的容量 ,而不是其大小 。
capacity
是内部已分配多少内存以容纳向量的元素。 size
是向量实际拥有的元素数。 vector::resize()
影响后者。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.