• STL模板库笔记


    STL标准模板库:

        STL是Standard Template Library缩写,中文名叫做标准模板库。由惠普实验室提供的(使用了C++的模板语言封装语言封装的常用的数据结构和算法),里面共有三大类内容:

            算法:以函数模板形式实现的常用算法,例如:swap、max、min、find、sort

            容器:以类模板形式实现了常用的数据结构,例如:栈、队列、链式表、顺序表、红黑树

            迭代器:它是容器的成员,用于帮助访问容器中的元素,使用方法类似于指针

       

    常用的算法函数:

        #include

        iterator find( iterator start, iterator end, const TYPE& val );

        功能:顺序查找

        start:指向第一个元素的指针或者迭代器

        end:指向最后一个元素的下一个位置的指针或迭代器

        val:待查找的关键数据

        返回值:

            在[start,end)找到了val,返回该val的指针或迭代器

            找不到返回end

        void sort( iterator start, iterator end );

        void sort( iterator start, iterator end, StrictWeakOrdering cmp );

        功能:快速排序

        start:指向第一个元素的指针或者迭代器

        end:指向最后一个元素的下一个位置的指针或迭代器

        注意:排序的元素需要支持 < 运算符,否则要在后面提供比较的回调函数参数,格式如下:

        cmp:

        bool cmp(const int& a,const int& b)

        {

            return a > b;  

        }

    vector向量容器:

        头文件:#include

        采用顺序结构存储数据,可以通过下标随机访问元素,因此也称为数组容器

        构造函数:

        vector( size_type num, const TYPE& val = TYPE() );

        num:数组的长度

        val:用于初始化所有元素,不给默认为0

        vector( input_iterator start, input_iterator end );

        功能:通过使用一组数据进行初始化向量容器

        start:数据的第一个元素

        end:最后一个元素的下一个位置

        支持的运算符:

            == != <= >= < > 会对容器进行整体比较,根据字符串的比较规则进行比较(一个个元素按照字典序比较,一旦比较出结果就结束)

            [] 让向量可以当做数组使用,一样不检查下标是否合法,当下标 >= size() 可能会出现段错误,向量不会随着访问而扩容,而是通过添加元素才会自动扩容

        常用的成员函数

        void assign( size_type num, const TYPE& val );

        功能:使用一组值为val的数据给向量赋值

        void assign( input_iterator start, input_iterator end );

        功能:使用一组范围是[start,end)的数据给向量赋值

        注意:赋值函数让向量原数据被覆盖,且数量会自动增加或减少

        TYPE& at( size_type loc );

        const TYPE& at( size_type loc ) const;

        功能:访问下标为loc的元素,相当于[],当loc越界时at函数一定会抛出异常,但是[]越界可能段错误、脏数据、一切正常

        TYPE& back();

        功能:返回向量中的最后一个元素

        TYPE& front();

        功能:返回向量中的第一个元素

        iterator begin();

        功能:返回指向第一个元素的迭代器  

        itertor end();

        功能:返回指向最后一个元素的下一个位置的迭代器

        for(vector::iterator it=v.begin();it!=v.end();it++)

        {  

            cout << *it << endl;    

        }

       

        size_type capacity() const;

        功能:获取向量的容量,容量是可以随着向量的动态变化

        size_type size() const;

        功能:获取向量的现有的元素数量

        void clear();

        功能:清空向量中的所有元素,但是容量不变,数量清零

        bool empty() const;

        功能:判断向量元素是否为空,空返回真

        iterator erase( iterator loc );

        功能:删除一个元素

        iterator erase( iterator start, iterator end );

        功能:删除范围[start,end)的元素

        注意:

            1、参数必须提供迭代器

            2、删除只是删除元素,容量不变

       

        iterator insert( iterator loc, const TYPE& val );

        功能:在某个元素之前插入值为val的元素,位置必须以迭代器形式提供

        void insert( iterator loc, size_type num, const TYPE& val );

        功能:在某个元素之前插入num个值为val的元素,位置必须以迭代器形式提供

        void insert( iterator loc, input_iterator start, input_iterator end );

        功能:在某个元素之前插入一组[start,end)数据,位置必须以迭代器形式提供

        size_type max_size() const;

        功能:计算出向量中最多能存储的元素个数,该结果月向量存储的元素类型以及计算机内存大小相关

        void pop_back();

        功能:删除最后一个元素

        void push_back( const TYPE& val );

        功能:在末尾添加一个元素,可能会导致向量容量不足,则会自动进行原容量翻倍的扩容

        reverse_iterator rbegin();

        const_reverse_iterator rbegin() const;

        功能:返回一个逆向迭代器,指向最后一个元素

        reverse_iterator rend();

        const_reverse_iterator rend() const;

        功能:返回一个逆向迭代器,他会指向第一个元素的前一个位置

        void reserve( size_type size );

        功能:修改向量的容量

        注意:只能修改后比原容量大

        void resize( size_type num, const TYPE& val = TYPE() );

        功能:修改向量的元素数量

        注意:

            1、可以往大了改,就会在末尾添加num个值为val的元素,且容量变为num

            2、可以往小了改,相当于删除元素,容量不变

        void swap( container& from );

        功能:交换两个向量的元素

    list容器:

        头文件:#include

        是一个功能齐全的双向链表

        list( size_type num, const TYPE& val = TYPE() );

        功能:创建num个元素,初始值为val的链表,不给默认为0

        list( input_iterator start, input_iterator end );

        功能:使用一组数据初始化链表

        所支持的运算符:

            = == !=

            < > <= >=  

            也是链表整体以字符串比较规则进行比较,

            元素也必须支持 < 运算符才能使用以上运算符

        常用的成员函数:

        void assign( size_type num, const TYPE& val );

        功能:向链表中赋值num个值为val的数据

        void assign( input_iterator start, input_iterator end );

        功能:向联表中赋值一组数据

        iterator begin();

        功能:返回指向第一个元素的正向迭代器  

        itertor end();

        功能:返回指向最后一个元素的下一个位置的常正向迭代器

        iterator end();

        功能:返回指向最后一个元素的下一个位置的正向迭代器

        const_iterator end() const;

        功能:返回指向最后一个元素的下一个位置的常正向迭代器

        TYPE& back();

        功能:返回链表中的最后一个元素

        TYPE& front();

        功能:返回链表中的第一个元素

        void clear();

        功能:清空链表中所有元素

        iterator erase( iterator loc );

        功能:删除链表中指定位置的元素,以迭代器形式提供位置

        iterator erase( iterator start, iterator end );

        功能:删除链表中[start,end)范围的元素,以迭代器形式提供位置

        注意:链表的迭代器不允许使用 it+n 这种语法,因为不支持随机访问

        iterator insert( iterator loc, const TYPE& val );

        功能:向链表中指定位置,插入一个值为val的元素,位置以迭代器形式提供

        void insert( iterator loc, size_type num, const TYPE& val );

        功能:向链表中指定位置,插入num个值为val的元素,位置以迭代器形式提供

        template void insert( iterator loc, input_iterator start,input_iterator end );

        功能:向链表中指定位置,插入一组元素,位置以迭代器形式提供

       

        void merge( list &lst );

        功能:按照顺序合并两个链表

        void merge( list &lst, BinPred compfunction );

        功能:合并两个链表,如果不支持<运算符,需要提供比较函数

        注意:想要合并后有序,合并前也必须各自有序,需要先各自排序后才能有序合并,合并后lst会元素删除

        注意:链表中的数据要支持 < 运算符才能排序

        void sort();

        void sort( BinPred p );

        功能:对链表中的元素进行快速排序,需要支持 < 运算符才行,否则需要提供比较函数

        reverse_iterator rbegin();

        const_reverse_iterator rbegin() const;

        功能:返回一个逆向迭代器,指向最后一个元素

        reverse_iterator rend();

        const_reverse_iterator rend() const;

        功能:返回一个逆向迭代器,他会指向第一个元素的前一个位置

        void remove( const TYPE &val );

        功能:删除链表中所有等于val的元素

        void remove_if( UnPred pr );

        功能:删除符合条件的元素

        pr:

            bool if_func(const int& num)

            {

                return num < 50;//条件满足返回真,则会被删除

            }

        void resize( size_type num, const TYPE& val = TYPE() );

        功能:修改链表中的元素数量为num

            可以往大了改,相当于尾增加值为val的元素

            可以往小了改,相当于尾删除

       

        void reverse();

        功能:反转链表

        void splice( iterator pos, list& lst );

        功能:把链表lst合并到当前链表的指定位置中,位置以迭代器形式提供,lst会删除所有元素

        void splice( iterator pos, list& lst, iterator del );

        功能:把链表lst指定del位置的元素合并到当前链表的指定pos位置中,位置以迭代器形式提供,lst会删除del位置开始的元素

        void splice( iterator pos, list& lst, iterator start, iterator end );

        功能:把链表lst指定[start,end)位置的元素合并到当前链表的指定pos位置中,位置以迭代器形式提供,lst会删除[start,end)位置开始的元素

        void unique();

        功能:删除重复元素,只保留一个

        void unique( BinPred pr );

        功能:删除重复元素,但元素类型必须支持 == 运算符,否则需要提供比较函数 pr

  • 相关阅读:
    jenkins post steps设置记录
    配置elasticsearch用windows account(AD)登录
    使用MySqlBulkLoader批量插入数据
    如何快速上手一个新项目?
    你觉得好的代码可能并不是最优的解决方案
    接口防止重复提交,订单避免重复下单
    畅购商城-第7章商品搜索
    HTML按钮通过JS实现选中和取消
    使用LabVIEW实现基于pytorch的DeepLabv3图像语义分割
    Android发展历程
  • 原文地址:https://blog.csdn.net/weixin_56262931/article/details/127712364