首页 > 解决方案 > 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

标签: c++c++11vectorstldynamic-memory-allocation

解决方案


我知道在每次 push_back() 之后,向量的容量以指数幂变化,但在上面的 OUTPUT 中,即使插入后容量有时仍然保持不变。

当容量大于插入后的大小时,容量不需要,保证不改变。

这种策略允许顺序推回具有恒定的复杂性(摊销)。


推荐阅读