【发布时间】:2017-11-14 19:54:10
【问题描述】:
我对向量中的内存分配有疑问(STL - C++)。据我所知,每当向量的大小等于它的容量时,它的容量就会动态加倍。如果是这种情况,为什么分配是连续的?它如何仍然允许像数组一样使用 [] 访问运算符进行 O(1) 访问?谁能解释这种行为? (List 也有动态内存分配,但是我们不能使用 [] 访问操作符访问它的元素,怎么还能用 vector 呢?)
#include<iostream>
#include<vector>
using namespace std;
int main() {
// your code goes here
vector<int> v;
for(int i=0;i<10;i++){
v.push_back(i);
cout<<v.size()<<" "<<v.capacity()<<" "<<"\n";
}
return 0;
}
输出:
1 1
2 2
3 4
4 4
5 8
6 8
7 8
8 8
9 16
10 16
【问题讨论】:
-
向量将其包含的元素移动到新缓冲区中。
-
容量没有有翻倍。向量如何增加其容量取决于实现。
-
@Someprogrammerdude 但它必须是摊销常量 push_back。
-
@manni66 - 你可以通过增加 50% 来获得它。它留给实现是有原因的。
-
这将帮助您了解其工作原理:mortoray.com/2014/08/22/…
标签: c++ vector stl dynamic-memory-allocation