• [C++标准模板库:自修教程与参考手册]关于vector


    什么是vector

    可以这样认为,vector就是一个动态的数组,其中的元素必须具备assignable(可赋值)和copyable(可拷贝)两个性质。
    这里写图片描述

    vector的一些重要的性质

    1. vector支持随机存取,存取时间为O(1)。
    2. vector的迭代器是随机存取迭代器,所以所有的STL算法都可以使用。
    3. 在末尾添加元素时,vector的性能非常好(只要总的元素个数没超过capacity就行)。但是如果在中间或者前面插入元素,那么性能就不是那么好了,此元素的后面全部元素都要后移,即每一次移动都要执行assign赋值操作。
    4. 两个vector交换内容后,它们的容量也会交换。
    5. vector的第一个元素的索引为0,最后一个元素的索引为size()-1。
    6. 一个vector vec,它的一些操作:vec[x],vec.front(),vec.back()三个操作都不会检查元素是否存在,所以要我们自己进行判断该位置的元素存在与否。

    vector的内存分配

    vector的size表示当前拥有元素的个数,capacity表示vector最多能拥有多少个元素。如果size的大小超过了capacity,那么vector就会重新调用内存分配器分配新的内存。
    vector的容量之所以有很大的重要性,是因为两个原因:

    1. 一旦内存重新分配,那么这个vetor的迭代器,引用,指针全都会失效。
    2. 内存重新分配非常耗费时间。

    当然,也可以使用reserve()函数来保存适当的容量,避免不必要的内存配置:

    std::vector<int> v;
    //提前分配好100的容量
    v.reserve(100);

    当然,如果reserve()的参数中的数值比当前的capacity要小的话,那么不会有任何反应。

    vector一些常用函数

    std::vector<int> c;
    //返回idx位置所在的元素,如果月结,就会跑出out_of_range异常
    c.at(idx);
    //返回索引idx所在的元素,不进行范围检查
    c[idx];
    //返回第一个元素。不检查第一个元素是否存在
    c.front();
    //返回最后一个元素,不检查最后一个元素是否存在
    c.back();
    //返回一个随机存取迭代器,指向第一个元素
    c.begin();
    //返回一个随机存取迭代器,指向最后一个元素
    c.end();
    //返回一个逆向迭代器,指向逆向迭代的第一元素
    c.rbegin();
    //返回一个逆向迭代器,指向逆向迭代的最后元素的下一个位置
    c.rend();
    //在pos位置上插入一个elem副本,并返回新元素的位置
    c.insert(pos,elem);
    //在pos位置上插入n个elem副本,无返回值。
    c.insert(pos,n,elem);
    //在pos位置上插入区间[beg:end]内所有元素的副本,无返回值
    c.insert(pos,beg,end);
    //在尾部添加一个elem副本
    c.push_back();
    //移除最后一个元素,但是不传回
    c.pop_back();
    //移除pos位置上的元素,返回下一个元素的位置
    c.erase(pos);
    //移除[beg,end]区间内的所有元素,返回下一元素的位置
    c.erase(beg,end);
    //将元素数量改为num,如果size()变大了,多出来的新元素都用默认构造函数完成
    c.resize(num);
    //将元素熟练改为num,如果size()变大了,多出来的新元素都是elem的副本
    c.resize(num,elem);
    //移除所有的元素,将容器清空
    c.clear();
    https://github.com/li-zheng-hao
  • 相关阅读:
    在asp.net中显示/隐藏GridView的列
    WPF中的图表设计器 – 2
    Code Project精彩系列
    C#实现台球游戏
    超级简单:DIV布局
    [WF4.0]工作流设计器Rehosting(三)
    android 集成 第三方应用,包。
    抓log方法
    android logcat 打印
    android build.prop学习
  • 原文地址:https://www.cnblogs.com/lizhenghao126/p/11053715.html
Copyright © 2020-2023  润新知