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 11: 2 22: 3 43: 4 44: 5 85: 6 86: 7 87: 8 88: 9 169: 10 1610: 11 1611: 12 1612: 13 1613: 14 1614: 15 1615: 16 1616: 17 3217: 18 3218: 19 3219: 20 3220: 21 3221: 22 3222: 23 3223: 24 3224: 25 3225: 26 3226: 27 3227: 28 3228: 29 3229: 30 32Process returned 0 (0x0) execution time : 0.029 sPress any key to continue.
