(2020.12.08 Tues)
STL容器允许重复利用已有的实现构造自己特定类型下的数据结构,通过设置一些模板类,这些模板的参数允许用户指定容器中元素的数据类型,从而提高编程效率。
(容器部分的内容可以对比python中的list, tuple, dict, set等数据结构。)
容器主要由头文件, , , , , 和组成。
数据结构
描述
实现头文件
向量(vector)
连续存储的元素
列表(list)
由节点组成的双向链表,每个结点包含着一个元素
双队列(deque)
连续存储的指向不同元素的指针所组成的数组
集合(set)
由节点组成的红黑树,每个结点都包含着一个元素,节点之间以某种作用于元素对的谓词排列,没有两个不同的元素能够拥有相同的次序
多重集合(multiset)
允许存在两个次序相等的元素的集合
栈(stack)
后进先出的值的排列
队列(queue)
先进先出的值的排列
优先队列(priority queue)
元素的次序是由作用于所存储的值对上的某种谓词决定的一种队列
映射(map)
由{键,值}对组成的集合,以某种作用于键对上的谓词排列
多重映射(multimap)
允许键对有相等的次序的映射
(2020.12.09 Wed)
STL定义的通用容器分为顺序容器(sequence container),关联容器(associative container)和容器适配器。
顺序容器
顺序容器是一种各元素间有顺序关系的线性表,是线性结构的可序群集,其中的每一个元素有固定的位置,除非用删除或插入的操作改变变量的位置。顺序容器具有插入速度快但查找操作相对较慢的特征。C++ STL(标准模板库)提供3中顺序容器:vector、list和deque。vector和deque类时以数组为基础,list类是以双向链表为基础。
顺序容器中各种类型的比较
vector是动态顺序容器,有连续内存地址的数据结构。相比于数组,vector会消耗更多的内存以有效地动态增长。而相比于其他顺序容器(deques, list),vector能更快的索引元素(如同数组一样),而且能相对高效的在尾部插入和删除元素。在其他位置删除和插入元素,效率没有这些容器高。
list是STL实现的双向链表,相比vector的连续线性空间,list复杂太多,它允许快速的插入和删除,但是随机访问却比较慢。它的数据有若干个节点构成,每个节点包括一个信息块、一个前驱指针和一个后驱指针&