STL-vector

Posted royal-8

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STL-vector相关的知识,希望对你有一定的参考价值。

  • vector是什么?

  vector其实就是一个数组,可以看成一个动态数组。内部实现是用倍增的思想,设n为vector实际长度,m为vector最大长度,当n=m时,vector就会申请2m的空间,并且把n转移到新的空间上,再进行其他操作。

  可能现在你就会有疑问了,这样的话好像如果进行删除操作,那么空间不会缩小啊,那不也没啥好处吗,不如开个数组;

  但vector在删除操作结束时,如果n<=(m>>1),会释放一半的空间;

  • vector的调用

  vector支持随机访问,可以像数组那么调用,不过第一个元素的下标为0

  例:如果定义一个vector a,调用时直接a[i]即可;

  • vector的插入和删除不支持在任意位置o(1)插入,所以为了保证vector的效率,一般增删在末尾进行;
  • vector的定义

  #include<vector>

  vector<int(整形,浮点型……)> a;//一个长度动态变化的数组,只有一维;

  vector<int(整形,浮点型……)> a[m]; //一个第一维长度为m,第二维长度动态变化的数组;

  struct node{

  ……

  };

  vector<node> a; //自定义的结构体类型也可保存在vector中;

  • vector的各种操作(暨函数)

  1.size/empty

    size()返回vector的实际长度,如果vector为空empty()返回1,反之则为0;(时间复杂度均为O(1));

    顺便提一句,所有的stl容器都支持这两个函数。

  2.Clear

         清空

     技术分享图片
*插入知识点——迭代器

迭代器是stl容器的“指针”,可以用 * 号解除引用。

一个保存int 的vector的迭代器声明方法为:

vector<int>::iterator it;

vector的迭代器是“随机访问迭代器”,vector的迭代器可以和整数或者两个迭代器之间相加减,结果和指针相减类似,得到两个迭代器的距离。
*插入知识点——迭代器

  3.begin/end

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

      a[0]和*a.begin()的作用相同;

      所有的容器均可看成前开后闭的结构  

    end()返回指向vector尾部的迭代器

    当n=a.size()时,a[n]和*a.end()作用相同,都是越界访问。

    所以有两种遍历vector的方法;

    for(register int i=0;i<=n-1;i++)

         cout<<a[i]<<endl;

    for(vector<int>::iterator it=a.begin();it!=a.end();i++)

         cout<<*it<<endl;

  4.front/back

       front( )返回vector的第一个元素,相当于a[0]和*a.begin();

       back( )返回vector的最后一个元素,等价于a[n-1]和*--a.end( );

  5.push_back( )和pop_back( )

    push_back(x)把元素x插入到a的尾部;

    pop_back( )删除a的最后一个元素;

  6.reverse()

    reverse(a.begin(),a.end())翻转vector a中的元素。

    但这个函数不是vector独有的,其他也可用;

    另一个例子: 

        技术分享图片
string str="C++REVERSE";
reverse(str.begin(),str.end());//str结果为ESREVER++C
反转字符串

 

 

 

    

  

以上是关于STL-vector的主要内容,如果未能解决你的问题,请参考以下文章

STL-vector

STL-vector

STL-vector,stack,list,queue

bzoj2724[Violet 6]蒲公英 分块+STL-vector

C++提高编程STL-vector容器

微信小程序代码片段