为什么向量具有不同的容量,而不是大小
Why vector has different capacity and other than the size?
以下是向量的程序,在C 11模式下的容量给出了不同的结果。
#include<iostream>
#include<vector>
using namespace std;
int main(){
vector<int>a ={1,2,3};
cout<<"vector a size :"<<a.size()<<endl;
cout<<"vector a capacity :"<<a.capacity()<<endl<<endl;;
vector<int>b ;
b.push_back(1);
b.push_back(2);
b.push_back(3);
cout<<"vector b size :"<<b.size()<<endl;
cout<<"vector b capacity :"<<b.capacity()<<endl;
return 0;
}
输出
向量A大小:3
向量A容量:3
向量B大小:3
向量B容量:4
为什么此程序给出了A和B的容量不同的值,而两个值都具有相同数量的值,并且大小与容量有何不同?
原因与向量的扩展算法的本质有关。初始化向量时,施加的额外容量的数量为0。在第三次需要扩展名中,该向量将其包含的矢量复制到新向量,其容量是当前大小的一倍。这种方法使整个变化阵列的想法非常有效,因为在摊销时间(意味着n操作的平均时间),我们得到o(1)插入复杂性。您可以看到,在第一个向量添加一个额外的整数后,我们将获得6个容量。http://coliru.stacked-crooked.com/a/f084820652f025b8
通过分配比所需的元素更多的元素,当向量添加新元素时,向量无需重新分配内存。另外,当减小大小时,根本不需要重新分配。
重新分配内存是一个相对昂贵的操作(创建新块,复制元素,删除旧块)。
权衡取舍是向量可能分配了比所需的更多内存(例如,如果它为永不添加/使用的元素分配内存)。实际上,除非稀缺可用的记忆,否则分配更大的块(较少分配的频率)的成本小于每次成本或重新分配的成本。
相关文章:
- 写入向量<向量<bool>>
- 函数向量_指针有不同的原型,我可以构建一个吗
- std::向量与传递值的动态数组
- 将值指定给向量(2D)的向量中的某个位置
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 如何使用向量的template_back函数
- C++ STL 向量保留太多容量会消耗大量内存吗?
- 在具有容量/调整大小的类中初始化向量
- 在将其尺寸较大的向量移动到容量较小的向量之前,是否可以通过使用Reserve()来提高代码性能
- 如何在vector::clear()上保持向量元素的容量
- 为什么向量具有不同的容量,而不是大小
- std::向量预分配(大小 n,容量 n + 2)
- C++中向量的初始容量
- 初始化具有预留容量的嵌套向量的子向量
- 从中移动数据的向量的容量
- 为什么在达到容量后在向量中插入时,C++不处理迭代器?
- 具有奇数大小的c++ STL向量,在添加任何内容之前容量为0
- 为什么向量的容量在传递给函数后变得等于它的大小?
- 将向量重新分配时push_back后收缩容量为零
- 清除向量会影响它的容量吗?