STL标准模板库

阅读须知:

C++语言实现了自定义模板,大家可以自己封装模板.

同样,C++的大牛们已经自己封装了模板库,类似于系统函数库,即STL(标准模板库).

目前C++中都包含STL标准化组件,在ubuntu上可以直接使用

鉴于学习Framework,经常性用到标准模板库下的数据增删改查

特此做一次小的总结,作为数据手册查询,不用查书那么麻烦了

些许不完全,以后还会再添加.

如有错误请及时提出!




正文


STL 内置常用模板

容   器: 存放不同对象的实体,通过容器的内部结构进行管理;

                  vector.deque .list .set .multiset .map .multimap .stack .queue .priority_queue

迭 代 器: 对指针的封装,是容器的内部类型;

                iterator .const_iterator .reverse_iterator .const_reverse_iterator

空间分配器: 用来为容器中的元素分配和释放空间

适 配 器: 转换器

算   法: 已实现的近百种算法

仿 函 数: 函数对象



容器分类:

序列式容器:存在一定的线性顺序关系;

        vector(动态数组,数组的尾部插入删除数据) 

        deque (两端队列,可以头部尾部插入删除数据)

        list(双向链表,任何位置插入删除数据)

关联式容器:是非线性数据结构(二叉树),各元素间没有明显的顺序关系,本质上就是键值对,容器中插入元素,首先根据键值之后到存储位置,再将元素的实际值写进去,


        set (快速查找符合条件的元素,但不允许出现重复值)

        multiset(在set的基础上可以出现重复值)

        map(一对一映射,基于key查找符合的元素,key不允许出现重复值)

        multimap(在map的基础上可以出现重复值)

容器适配器:让一种已存在的容器类型采用另外一种不同类型容器的工作方式来实现的一种机制,就是容器间的转换接口,

        stack(栈结构,后进先出)

        queue(队列,先进先出)

        priority_queue(具备优先级的队列,最高优先级的第一个出列)




序列式容器的常用函数:

交换函数: swap()

删除函数: erase()

清空函数: clear()

返回值代表当前容器包含元素个数:size()                                                                                          

调整容器空间的大小: resize(新的大小,初始化=零初始化)

检查容器是否为空函数:empty()

构造函数的参数类型:(元素个数,初始值=零初始化)

容器内插入元素:

        insert(pos,elem) 在指定位置pos插入elem

        insert(pos,n,elem) 在指定位置pos插入n个elem

        insert(pos,begin,end)将区间[begin,end)的数据插入到本容器pos位置之后


容器中的元素重新赋值:

        assign(n,elem);将容器中n个元素都赋值为elem,没有赋值的容器元素将被抛弃

        assign(begin,end);将区间[begin,end)中的数据赋值给本容器的元素,没有赋值的本容器元素被抛弃


复制开头元素并返回i: front()

复制末尾元素并返回: back()

末尾追加元素: push_back(elem)不能在初始化之后直接使用,要有值之后使用

删除末尾元素: pop_back()

返回值代表容器的开始位置:begin()      返回值是迭代器

返回值容器的结束位置的后一个位置:end()   返回值是迭代器




vector 独有的函数:

at(index)    访问vector元素,index代表下标,也可以使用数组的下标操作来查询数据

示例:vector a(6,0)


list 独有的函数:

删除list容器中指定的元素:remove(elem)

删除list容器中第一个元素:pop_front()

删除list容器中最后一个元素:pop_back()

删除list容器中所有相邻的重复元素:unique()

list容器升序:sort()

list容器降序:sort(std::greater

list容器反序:reverse()

将另外一个list容器的全部元素移动到当前容器的指定位置:splice(pos,

将另外一个list容器的部分元素移动到当前容器的指定位置:splice(pos,,begin,end)

将另外一个list容器的某个位置元素移动到当前容器的指定位置:splice(pos,,pos2)

将另外一个容器合并到当前list容器:merge(

一种新的赋值方式        

            int a[7] = {2,123,23,45,35,43,53};

            list l(a,a+7);


deque 独有的函数:

        几乎支持vector和list的常用操作

        详见:[https://en.cppreference.com/w/cpp/container/deque](https://en.cppreference.com/w/cpp/container/deque)




关联式容器:

是一种称为红黑树的平衡检索二叉树:set.multiset.map.multimap均采用了红黑树结构

数据结构:struct BinaryTreeNode{

                        keyType key;

                        int color;

                        BinaryTreeNode* parent;

                        BinaryTreeNode* left;

                        BinaryTreeNode* right;

                }        


set:

        容器中的每一个元素对应红黑树上的一个节点,每个元素可以使用key来表示,

        容器中的元素是按照一定的顺序排列的

        容器中key的属性是只读的,不可修改,除非先全部删除再写入

        默认升序:set a;

        降序排序:set > a;

        返回值为true代表为空:empty()

        向容器中插入一个元素:insert(elem);    

        删除某个位置的元素:erase(pos);

        删除某个元素:erase(elem);

        删除所有元素:clear()

        查看某个元素的存放位置:find(elem)

        统计包含元素个数:size()





喜欢的话给个爱心,会有更多的干货哦

你可能感兴趣的:(STL标准模板库)