vector和array一样用连续的内存空间存储元素,它的capacity表示现有的内存空间能存储多少元素,它的size表示当前已存储的元素个数。
    当size==capacity时,下一次插入元素会申请一块更大的内存空间,并将当前的元素拷贝到新的内存空间,然后再执行插入操作。

    每次申请的内存空间大小一般是原来的2倍或1.5倍,1.5倍的扩容因子可以避免较多内存空间的浪费。

    所以在使用vector时如果知道要存储元素的个数,可以在声明时指定大小,避免重新分配内存空间浪费时间空间。

    1. vector<int> arr(n); // capacity=n

    vc++用1.5倍,gnu用2倍。

    下面的程序使用MinGW编译器编译并执行,从结果可以看出,capacity每次以2倍增大,扩容因子是2。

    1. #include <iostream>
    2. #include <vector>
    3. using namespace std;
    4. int main(){
    5. vector<int> arr;
    6. for(int i=0; i<30; i++){
    7. arr.push_back(1);
    8. cout << i << ":\t"<< arr.size() << "\t" << arr.capacity() << endl;
    9. }
    10. return 0;
    11. }

    输出结果:

    1. 0: 1 1
    2. 1: 2 2
    3. 2: 3 4
    4. 3: 4 4
    5. 4: 5 8
    6. 5: 6 8
    7. 6: 7 8
    8. 7: 8 8
    9. 8: 9 16
    10. 9: 10 16
    11. 10: 11 16
    12. 11: 12 16
    13. 12: 13 16
    14. 13: 14 16
    15. 14: 15 16
    16. 15: 16 16
    17. 16: 17 32
    18. 17: 18 32
    19. 18: 19 32
    20. 19: 20 32
    21. 20: 21 32
    22. 21: 22 32
    23. 22: 23 32
    24. 23: 24 32
    25. 24: 25 32
    26. 25: 26 32
    27. 26: 27 32
    28. 27: 28 32
    29. 28: 29 32
    30. 29: 30 32
    31. Process returned 0 (0x0) execution time : 0.029 s
    32. Press any key to continue.