• 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;

  • 相关阅读:
    All in One SEO 插件提取中文描述过短解决方法
    C++基础入门丨5. 数组——一维数组和二维数组
    时间序列-AR MA ARIMA
    《ON JAVA》学习笔记2:Java如何谈数据类型
    java毕业设计新闻稿件管理系统Mybatis+系统+数据库+调试部署
    C#11新特性之原始字符串
    手写Ribbon基本原理
    micro-ROS中对消息的内存管理
    JAVA经典百题之圆的面积
    自然语言处理(NLP)
  • 原文地址:https://blog.csdn.net/2302_79215415/article/details/139755265