当我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()不会改变大小.
小智 7
vector::reserve()改变矢量的容量,而不是它的大小.
capacity是内部分配了多少内存来保存向量的元素.size是矢量实际拥有多少元素.vector::resize()影响后者.
| 归档时间: |
|
| 查看次数: |
2039 次 |
| 最近记录: |