• C++学习之路: STL探索 vector 的自增长


    这篇我们讨论一下vector 自增长的体现

     1 #include <iostream>
     2 #include <string>
     3 #include <vector>
     4 using namespace std;
     5 
     6 int main(int argc, const char *argv[])
     7 {
     8     vector<int> vec;
     9     vec.push_back(12);
    10 
    11     cout << vec.size() << endl; //1
    12     vec.resize(5);
    13     cout << vec.size() << endl;
    14 
    15     for(int i : vec)
    16     {
    17         cout << i << " ";
    18     }
    19     cout << endl;
    20 
    21     return 0;
    22 }

    打印结果可知, resize()函数重置了 元素个数, 可能截断现元素, 如果扩充则补充0;

    这里我们要理解两个概念:

    rsize() 和 reserve()

    了解这两个函数的区别,首先要搞清楚容器的capacity(容量)与size(长度)的区别。

    size指容器当前拥有的元素个数;

    而capacity则指容器在必须分配新存储空间之前可以存储的元素总数。

    也可以说是预分配存储空间的大小。

     1 #include <iostream>
     2 #include <string>
     3 #include <vector>
     4 using namespace std;
     5 
     6 void print(const vector<int> &vec)
     7 {
     8     cout << "size = " << vec.size() << endl;
     9     cout << "capacity  = " << vec.capacity() << endl;
    10 }
    11 
    12 int main(int argc, const char *argv[])
    13 {
    14     vector<int> vec;
    15     print(vec);   // 0 
    16 
    17     for(int i = 0; i != 24; ++i)
    18     {
    19         vec.push_back(i);
    20         print(vec);
    21     }
    22     print(vec); // 24  
    23 
    24 
    25     vec.reserve(50);
    26     print(vec);
    27 
    28     while(vec.size() < vec.capacity())
    29     {
    30         vec.push_back(99);
    31     }
    32 
    33     print(vec);
    34 
    35     vec.push_back(23);
    36     print(vec);
    37 
    38 
    39     return 0;
    40 }

    打印结果, 当size是24 的时候capacity 是32 , 也就是说在size大于32前, 不需要重新分配内存空间。

  • 相关阅读:
    版本控制 version control
    URL URI
    能用上的收藏
    函数式语言简介(functional language)
    h5触摸事件-判断上下滑动
    地理定位
    web存储
    jquerymobile tap事件被触发两次
    关于button的onclientclick事件和onclick事件
    .net 后台给html控件赋值
  • 原文地址:https://www.cnblogs.com/DLzhang/p/3987270.html
Copyright © 2020-2023  润新知