C++ c+的大小()和容量()+;载体

C++ c+的大小()和容量()+;载体,c++,c++11,vector,stl,dynamic-memory-allocation,C++,C++11,Vector,Stl,Dynamic Memory Allocation,我刚开始学习C++的标准库,我首先学习的是std::vector。我对向量中的capacity()。我知道在每次推回()之后,向量的容量以指数幂变化,但在下面的输出中,容量有时保持相同的值,即使在插入之后也是如此。有人能给我解释一下内部工作吗 #include<iostream> #include<vector> using namespace std; int main(){ vector<int> v; int capacity=v.c

我刚开始学习C++的标准库,我首先学习的是
std::vector
。我对向量中的
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;
}
我知道在每次推回()之后,向量的容量以指数幂的形式变化,但在上面的输出中,容量有时甚至在插入之后仍然保持不变

当容量大于插入后的大小时,容量不需要更改,并且保证不会更改

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

我知道在每次推回()之后,向量的容量以指数幂的形式变化,但在上面的输出中,容量有时甚至在插入之后仍然保持不变

当容量大于插入后的大小时,容量不需要更改,并且保证不会更改

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

From:[强调添加]

矢量的存储是自动处理的,可根据需要进行扩展和收缩。向量通常比静态数组占用更多的空间,因为分配了更多的内存来处理未来的增长。这样,向量不需要在每次插入元素时重新分配,而只需要在额外内存耗尽时重新分配。可以使用capacity()函数查询分配的内存总量。可以通过调用shrink_to_fit()将额外内存返回到系统。(从C++11开始)

发件人:[强调添加]

矢量的存储是自动处理的,可根据需要进行扩展和收缩。向量通常比静态数组占用更多的空间,因为分配了更多的内存来处理未来的增长。这样,向量不需要在每次插入元素时重新分配,而只需要在额外内存耗尽时重新分配。可以使用capacity()函数查询分配的内存总量。可以通过调用shrink_to_fit()将额外内存返回到系统。(从C++11开始)

我知道每次
推回()
后,向量的
容量
以指数幂变化
,但在下面的输出中,
容量
有时保持相同的值,即使在插入之后也是如此

这就是你的误解所在。向量的容量不会在每次插入时都增加,而是其大小增加。当插入导致大小增加超过当前容量时,或者如果您通过调用
reserve()
方法明确请求容量增加,则容量将增加

我知道每次
推回()
后,向量的
容量
以指数幂变化
,但在下面的输出中,
容量
有时保持相同的值,即使在插入之后也是如此


这就是你的误解所在。向量的容量不会在每次插入时都增加,而是其大小增加。当插入导致大小增加超过当前容量时,或者如果您通过调用
reserve()明确请求容量增加,则容量将增加在新的大小大于当前容量的情况下,向量只分配新的容量。作为C++初学者,你可以简单地忘记容量。就好像这个概念不存在一样。size()很重要,但在处理高级或内存密集型程序之前,容量不是一个有用的概念。“容量”是指一张桌子上有多少张椅子。“大小”是指有多少人在使用这些椅子。推倒一个人坐在桌子上(增加尺寸),但是如果没有足够的椅子,必须有人去买更多的椅子,然后这个人才能坐下。这回答了你的问题吗?如果新的大小大于当前容量,则向量只分配新的容量。作为C++初学者,你可以简单地忘记容量。就好像这个概念不存在一样。size()很重要,但在处理高级或内存密集型程序之前,容量不是一个有用的概念。“容量”是指一张桌子上有多少张椅子。“大小”是指有多少人在使用这些椅子。推倒一个人坐在桌子上(增加尺寸),但是如果没有足够的椅子,必须有人去买更多的椅子,然后这个人才能坐下。这回答了你的问题吗?
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