• 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
    反转字符串

        

      

  • 相关阅读:
    任务二 发布作业信息(已完成)
    查看作业信息(任务一 已完成)
    项目冲刺任务之任务场景分析(四)
    项目冲刺之任务场景分析(三)
    解析XML文件的两种方式 SAX和DOM
    解析XML文件的两种方式 SAX和DOM
    iOS开发代码规范(通用)
    随机创建点击对象
    自定义加载等待框(MBProgressHUD)
    KVO、KVC
  • 原文地址:https://www.cnblogs.com/royal-8/p/9246002.html
Copyright © 2020-2023  润新知