c++ - C++ vector 的 size() 和 capacity()

标签 c++ c++11 vector stl dynamic-memory-allocation

我刚刚开始使用 C++ 的标准库,我首先开始使用的是 std::vector。我对 vector 中的 capacity() 有点困惑。我知道在每次 push_back() 之后, vector 的 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

最佳答案

I know that after each push_back() the capacity of the vector changes in exponential powers but in the above OUTPUT the capacity is still remaining same sometimes even after insertion.

当capacity大于插入后的size时,capacity不需要,保证不变。

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

关于c++ - C++ vector 的 size() 和 capacity(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62959007/

相关文章:

c++ - 在哪里可以找到有关 C++11、std 新功能和 Tr1 的可靠信息?

c++ - 指定调用 std::copy 的小数精度

c++ - boost : problems with placement new 中的 load_construct_data

c++ - 如何使用 boost iostreams 进行流式解压缩

c++ - 用于在其他类中声明对象时模板化类链接错误

c++ - 在 C++11 中,将引用/指针返回到 std::string 中某个位置的最高效方法是什么?

c++ - 模板化类中模板化成员函数的特化

c++ - istream_iterator 从流中消耗太多

vector - Clojure 引用向量

unity-game-engine - 旋转对象使其面向相反方向