我对向量(STL - C++)中的内存分配有疑问。据我所知,每当向量的大小等于其容量时,其容量就会动态加倍。如果是这样的话,为什么分配是连续的呢?它如何仍然允许像数组一样使用 [] 访问运算符进行 O(1) 访问?谁能解释这种行为?(列表也有动态内存分配,但我们无法使用 [] 访问运算符访问其元素,向量怎么可能呢?)
#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;
}
Run Code Online (Sandbox Code Playgroud)
输出:
1 1
2 2
3 4
4
4 5
8 6
8 7
8 8 8
9 16
10 16