• vector的特性及使用


    1、 vector的定义:

    单独定义一个vector的形式为:

    vector<typename>vector;

     1.如上定义其实相当于一个大小可变化的序列容器,即变长数组

    2.vector采用连续的储存空间来储存元素,意味着可以通过下标来访问元素,和数组一样高效,但是又比数组更优秀,它的大小是可以动态改变的,而且它的大小是可以由自身改变的,不用手动扩容。

    3.与其他的动态序列容器相比(deque,list等),vector在访问元素的时候更加便利,在头尾添加和删除元素的效率更高,但是对于其他不在于末尾的删除和插入操作,效率更低。

    4.本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。就时间而言,这是一个相对代价高的任务,因为每当一个新的元素加入到容器的时候,vector并不会每次都重新分配大小

     

     2.vector接口函数的使用

     

    1、vector初始化

    1】使用花括号直接赋值

    vector v{1,2,3,4,5}; 

    2】使用圆括号赋值

    vector v(5);//初始化为5个值为0的元素 

     2、vector容器元素的访问

    1】通过下标访问

    定义为vector v的容器,可以通过下标,v[0],v[1],v[2]......等的方式访问元素,下标的范围是0-v.size()-1;

    2】通过迭代器访问

    迭代器可以理解为类似原生指针的东西

    vector::iterator  it;

    可以通过对类似于指针的迭代器解引用的方式来达到访问元素的目的。

    #include
    #include
    using namespace std;
    int main()
    {
        vector v{ 1,2,3,4,5 };
        vector ::iterator it = v.begin();
        while (it != v.end())
        {
            cout << *it << " ";
            it++;
    }
        return 0;
    }

     3、vector元素的插入操作:push_back()

     在元素的末尾插入一个元素x,时间复杂度为o(1);

        vector v{ 1,2,3,4,5 };
        vector ::iterator it = v.begin();
        v.push_back(6);
        for (auto e : v)
        {
            cout << e << " ";
        }
        cout << endl;

    4、尾部删除操作:pop_back() 

    删除末尾的一个元素,时间复杂度为o(1);

        vector v{ 1,2,3,4,5 };
        vector ::iterator it = v.begin();
        v.pop_back();
        for (auto e : v)
        {
            cout << e << " ";
        }
        cout << endl;


     5.获得元素个数:size()

     size()用于获取vector容器的元素个数,其返回值为size_t,时间复杂度为o(1)

    vector v{ 1,2,3,4,5 };
    cout << v.size() << endl;

     6.插入操作:insert()(重要!!!)

    参见cplusplus定义:

    single element (1)
    iterator insert (iterator position, const value_type& val);//从索引pos位置插入一个类型为value_type的元素val
    
    fill (2)
        void insert (iterator position, size_type n, const value_type& val);//从索引pos位置开始插入n个类型为value_type的元素val
    
    range (3)
    template 
        void insert (iterator position, InputIterator first, InputIterator last);//从索引迭代器pos位置开始插入一个值区间。

     

        vector v{ 1,2,3,4,5 };
        vector v2{ 7,8,9 };
        v.insert(v.begin() + 2, 1);
        //在3的位置前插入一个1,{1,2,1,3,4,5};
        for (auto e : v)
            cout << e << " ";
        cout << endl;
        v.insert(v.begin() + 4, 3, 7);
        for (auto e : v)
            cout << e << " ";
        cout << endl;
        //在4的位置开始插入3个7;{1,2,1,3,1,7,7,7,4,5};
        v.insert(v.begin() + 2, v2.begin(), v2.end());
        //从3的位置前开始插入v2.的一个区间{1,2,7,8,9,1,3,1,7,7,7,4,5};
            for (auto e : v)
                cout << e << " ";
        cout << endl;

    7.删除操作:erase()

     

    iterator erase (iterator position);//删除pos位置的元素
    iterator erase (iterator first, iterator last);//删除一个区间

         vector v{ 1,2,3,4,5 };
        v.erase(v.begin() + 1);
        //删除2 -》{1,3,4,5};
        for (auto e : v)
        cout << e << " ";
    cout << endl;
    vector::iterator it = v.begin();
    vector::iterator it1 = it+2;
    v.erase(it, it1);
    //删除v[0]-v[2] ->{4,5};
    for (auto e : v)
        cout << e << " ";
    cout << endl;

  • 相关阅读:
    R语言ggplot2可视化:基于aes函数中的group参数绘制分组折线图并添加数据点(散点)、geom_point函数中配置数据点形状、大小、颜色、填充色等
    SpringAOP-底层原理解析
    Linux常用命令 - 用户管理命令
    5分钟了解Redis的内部实现快速列表(quicklist)
    我从自动化测试转为测试开发,资深测试总结测试开发技术栈,提升之路......
    【JavaWeb】Servlet过滤器
    【赛后总结】第十三届服务外包创新创业大赛总结——A14
    啃完朋友分享给我的《Linux全解笔记》我都不敢说我懂linux了
    Maven仓库地址(寻找Maven依赖)
    EL&JSTL:EL表达式总结
  • 原文地址:https://blog.csdn.net/2302_79215415/article/details/139755265