【发布时间】:2020-11-07 13:22:24
【问题描述】:
我刚刚开始使用 C++ 的标准库,我开始使用的第一件事是 std::vector。我对向量中的capacity() 有点困惑。我知道在每个push_back() 之后,向量的capacity 以指数幂变化,但在下面的输出中,capacity 有时保持相同的值,即使在插入之后也是如此。有人可以向我解释一下内部工作吗?
#include<iostream>
#include<vector>
using namespace std;
int main(){
vector<int> v;
int capacity=v.capacity();
cout<<"Capacity before push_back(): "<<capacity<<endl;
for(int i=0;i<10;i++){
v.push_back(i);
cout<<"Capacity: "<<v.capacity()<<endl;
}
for(auto j=v.begin();j!=v.end();j++){
cout<<*j<<endl;
}
cout<<"Size of vector: "<<v.size()<<endl;
cout<<"Final Capacity of vector: "<<v.capacity()<<endl;
return 0;
}
输出:
Capacity before push_back(): 0
Capacity: 1
Capacity: 2
Capacity: 4
Capacity: 4
Capacity: 8
Capacity: 8
Capacity: 8
Capacity: 8
Capacity: 16
Capacity: 16
0
1
2
3
4
5
6
7
8
9
Size of vector: 10
Final Capacity of vector: 16
【问题讨论】:
-
向量仅在新大小大于当前容量时才分配新容量。
-
作为 C++ 的初学者,您可以简单地忘记容量。就像这个概念不存在一样。 size() 很重要,但在处理高级或内存密集型程序之前,容量并不是一个有用的概念
-
“容量”是一张桌子上有多少把椅子。 “大小”是有多少人在使用这些椅子。 push_back 让一个人坐在桌子旁(增加尺寸),但如果没有足够的椅子,就必须有人去买一堆椅子,然后然后这个人就可以坐了。
-
这能回答你的问题吗? size vs capacity of a vector?
标签: c++ c++11 vector stl dynamic-memory-allocation