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的最后一个元素;

猜你喜欢

转载自www.cnblogs.com/royal-8/p/9246002.html