zoukankan      html  css  js  c++  java
  • 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前, 不需要重新分配内存空间。

  • 相关阅读:
    vue 富文本编译器 vue-quill-editor
    vue-拖拽的使用awe-dnd
    Dapper是什么?
    如何运用领域驱动设计
    面试官问我MySQL索引,我
    MySQL:你知道什么是覆盖索引吗?
    mysql覆盖索引与回表
    C#.NET 字符串转数组,数组转字符串
    MYSQL如何让主键使用BTREE索引
    MySQL大表优化方案 Mysql的row_format(fixed与dynamic)
  • 原文地址:https://www.cnblogs.com/DLzhang/p/3987270.html
Copyright © 2011-2022 走看看