vector和array一样用连续的内存空间存储元素,它的capacity表示现有的内存空间能存储多少元素,它的size表示当前已存储的元素个数。
当size==capacity时,下一次插入元素会申请一块更大的内存空间,并将当前的元素拷贝到新的内存空间,然后再执行插入操作。
每次申请的内存空间大小一般是原来的2倍或1.5倍,1.5倍的扩容因子可以避免较多内存空间的浪费。
所以在使用vector时如果知道要存储元素的个数,可以在声明时指定大小,避免重新分配内存空间浪费时间空间。
vector<int> arr(n); // capacity=n
vc++用1.5倍,gnu用2倍。
下面的程序使用MinGW编译器编译并执行,从结果可以看出,capacity每次以2倍增大,扩容因子是2。
#include <iostream>
#include <vector>
using namespace std;
int main(){
vector<int> arr;
for(int i=0; i<30; i++){
arr.push_back(1);
cout << i << ":\t"<< arr.size() << "\t" << arr.capacity() << endl;
}
return 0;
}
输出结果:
0: 1 1
1: 2 2
2: 3 4
3: 4 4
4: 5 8
5: 6 8
6: 7 8
7: 8 8
8: 9 16
9: 10 16
10: 11 16
11: 12 16
12: 13 16
13: 14 16
14: 15 16
15: 16 16
16: 17 32
17: 18 32
18: 19 32
19: 20 32
20: 21 32
21: 22 32
22: 23 32
23: 24 32
24: 25 32
25: 26 32
26: 27 32
27: 28 32
28: 29 32
29: 30 32
Process returned 0 (0x0) execution time : 0.029 s
Press any key to continue.