<vector>常用操作

    如果不清楚vector是什么的话就去看我的另一篇随笔吧:https://www.cnblogs.com/buanxu/p/12791785.html

    进入正题,vector和string一样,也是一种顺序容器,并且它俩的成员函数及特性也都差不多类似;它俩的区别就在于string只能存放字符,而vector可以存放各种数据类型。

vector在标准库中,是一个模板类和函数库,能操作多种数据结构和算法。再说一下vector的特性,由于vector重载了[ ],所以它可以通过下标随机访问;并且它在

末端进行插入、删除操作比较快,不过只能push和pop;而由于vector是顺序的,它在内存中占用了连续的内存单元,所以在中间插入、删除的时候很慢。另外,

当向vector容器里动态添加的数据超过vector默认分配的大小时,就会进行整体的拷贝和释放,重新分配内存,此时原来vector容器的迭代器就会失效,并且vector在进行插入、

删除操作的时候,迭代器也会失效。

    下面介绍一下vector常用的操作

     1. vector容器的构造函数

        vector<int> v;    声明一个vector容器v。

        vector<int> v(n);声明一个大小为n的vector容器v,且此方法只适用于顺序容器。

        vector<int> v(n,a);声明一个大小为n的vector容器v,并用a来初始化(用a填充v)。

        vector<int> v{1,2,3,4,5} 或 vector<int> v={1,2,3,4,5}    初始化一个容器,类似于数组,在vs2010及以下的版本不能用此构造方法,2010以上的我也没用过,所以不知道。

特别要注意,容器在没有初始化和声明大小的时候,是不可以通过下标来进行复制的,如v[i]=3,这是错误的,编译会报错越界。只有在声明了容器大小或用push_back()向容

器里添加数据后,才可以用下标进行访问,并且下标不能越界。内存不够的话就用resize()分配好空间以后再用下标访问。

    2. vector容器之间的复制

       下面的例子中,假设v2都已经初始化过了

      (1) vector<int> v1;

            v1=v2;   //可以直接赋值

      (2) vector<int> v1(v2);   //声明的时候直接把v2拷贝给v1

      (3) vector<int> v1;

           v1.swap(v2);   //交换两个容器,不过需要构建临时对象,一个拷贝构造,两次赋值操作

      (4)  vector<int> v1;

           v1.assign(v2.begin(), v2.end() ); //把v2指定区间内的数据赋给v1,会覆盖掉v1中的数据。assign()还有另外一个功能,v1.assign(n,a),即把v1中前5个元素都赋值为a。

    3. vector常用的成员函数    

        push_back();向vector容器的末尾位置添加字符

        push_pop(); 把vector容器里的末尾元素弹出容器,即删除操作

        begin();返回一个指向容器中第一个元素的迭代器

        end();返回一个指向容器中最后一个元素的下一个位置的迭代器

        rebegin();反向迭代,返回指向最后一个元素的下一个位置的迭代器

        rend();  反向迭代,返回指向第一个元素的的迭代器

        front();返回容器中第一个元素的引用,可以对其进行存取及修改操作

        back();返回容器中最后一个元素的引用,可以对其进行存取及修改操作

        at();此成员函数有参数,参数是下标。作用类似于[ ]操作符,用来对指定下标位置的元素进行随机访问,可进行存取及修改操作

        resize(int n, char c);调整容器有效数据尺寸,若尺寸变大,则自动截掉多余的数据;若尺寸变大,则空出的用该函数的第二个参数填充,会影响容器的size。

        reserve(); 为容器预留足够的空间,避免了不必要的重复分配,分配空间大于等于函数的参数,会影响capacity。 

        v1.swap(v2);交换容器v1和v2

        clear();清空当前容器

        empty();判断容器是否为空,为空返回1,非空返回0

原文地址:https://www.cnblogs.com/buanxu/p/12782045.html