容器主要分为:顺序容器和关联容器

顺序容器和关联容器,顺序容器主要有:vector、list、deque等。其中vector表示一段连续的内存地址,基于数组的实现,list表示非连续的内存,基于链表实现。deque双向队列与vector类似,但是对于首元素提供删除和插入的双向支持。关联容器主要有map和set。map是key-value形式的,set是单值。map和set只能存放唯一的key值,multimap和multiset可以存放多个相同的key值, 还有unorder_multimap等。

STL顺序容器的基本操作

STL顺序容器的基本操作

 

 

顺序容器

vector

STL顺序容器的基本操作

 

/*
* 什么是vector, vector的特点
* vector类似一个动态数组,是一段地址连续的空间
* vector和array的区别:vector支持动态空间调整,随着元素的增加,大小会改变
*/

   // 初始化:

    vector<int> v;
    vector<int> v2(10);  // 可以容纳10个int
    vector<int> v3(10, 2); // 10个2
    vector<int> v4(v2);
    int arr[4] = {1,2,3,4};
    vector<int> v5(arr, arr+4);

    // 其他操作, 是vector容器自带的函数,不包含全局的算法(find查找,remove_if删除等)
    // 添加元素
     vec.push_back(3); // 在最后添加元素
     insert();  
     /*
        iterator insert( iterator loc, const TYPE &val );
        void insert( iterator loc, size_type num, const TYPE &val );
        void insert( iterator loc, input_iterator start, input_iterator end );
        insert() 函数有以下三种用法:

        在指定位置loc前插入值为val的元素,返回指向这个元素的迭代器,
               在指定位置loc前插入num个值为val的元素
        在指定位置loc前插入区间[start, end)的所有元素 .

     */
     // 删:
    
     // erase
    iterator erase( iterator loc );
    iterator erase( iterator start, iterator end );
    //    erase函数要么删作指定位置loc的元素,要么删除区间[start, end)的所有元素.
    // 返回值是指向删除的最后一个元素的下一位置的迭代器.例如:

    vec.clear();        // 清空容器
    vec.pop_back();     // 移除尾部元素,无返回值


    //
    vec.back();         // 返回最有一个元素的引用
    vec.begin();              // 返回当前容器首元素的迭代器
    vec.end();            // 尾后迭代器
    vec.rbegin();         // rbegin函数返回指向当前vector末尾的逆迭代器
    vec.rend();         // rend()函数返回指向当前vector起始位置的逆迭代器. 类似与begin和end


    其他
    vec.empty();        // 判断是否为空
    vec.capacity();     // 返回当前vector在重新进行内存分配以前所能容纳的元素数量.
                        //    reserve()函数为当前vector预留至少共容纳size个元素的空间

                        //    void resize( size_type size, TYPE val );
    vec.resize();        // resize() 函数改变当前vector的大小为size,且对新创建的元素赋值val
    vec.size();          // 返回当前所容纳的元素个数
                        //    vec.swap(vec2)  // vec和vec2交换
    // 遍历:
    void print(vector<int>& vec)
    {
        for (int i = 0; i < vec.size(); i++)
            cout << vec[i] << " ";
        
        for (vector<int>::iterator it = vec.begin(); it != vec.end(); it++)
        {
            cout << *it << " ";
        }
        for (auto item : vec)
        {
            cout << item << " ";
        }
        cout << endl;
    }
vector常用方法

相关文章: