c++ - c++ 向量的 size() 和 capacity()
问题描述
我刚刚开始使用 C++ 的标准库,我开始使用的第一件事是std::vector
. 我对capacity()
向量中的 in 有点困惑。我知道在每个 之后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
解决方案
我知道在每次 push_back() 之后,向量的容量以指数幂变化,但在上面的 OUTPUT 中,即使插入后容量有时仍然保持不变。
当容量大于插入后的大小时,容量不需要,保证不改变。
这种策略允许顺序推回具有恒定的复杂性(摊销)。
推荐阅读
- multithreading - 在 GUI 编程中使用线程
- postgresql - 如何实现“状态”字段更新时填充的“被盗”字段?TRIGGER 函数和 GENERATED ALWAYS AS 尝试附加
- 3d - 如何创建一堆 2d 图像并将它们可视化为 3d?
- python - 如何执行模板匹配以获取三角形的方向?
- blazor - MudBlazor AppBar 不停留在位置
- python - 模糊 wuzzy 查找匹配项和与匹配项关联的其他列
- javascript - 如何在使用 javascript 删除数据之前添加确认页面?
- python - 如何在与 CSV 文件相关的列中添加值 (Pandas)
- sql - 如果 parent_id 已经存在,如何查找和删除 child_id
- javascript - 将 create table onclick 事件更改为 Onload Page