容器概述
- 在实际的开发过程中,数据结构本身的重要性完全不逊于算法的重要性,当程序中存在着对时间要求很高的部分时,数据结构的选择就显得更加重要。
试想: 一条死胡同里面停车,这样的效率会很高吗?
- 经典的数据结构数量有限,但是在项目实战中,我们常常重复着一些为了存放不同数据类型而实现顺序表、链表等结构而重复编写的代码,这些代码都十分相似,只是为了适应不同数据类型的变化而在细节上有所出入。
- STL容器就为我们提供了这样的方便,它允许我们重复利用已有的实现构造自己的特定类型下的数据结构,通过设置一些模板,STL容器对最常用的数据结构提供了支持,这些模板的参数允许我们指定容器中元素的数据类型,避免重复编码。
- 容器部分主要有由< vector>,< list>,< deque>,< set>,< map>,< stack> 和< queue>组成。
下面是常用的一些容器,可以通过下表总结一下它们和相应头文件的对应关系。
数据结构 | 描述 | 实现头文件 |
向量(vector) | 连续存储的元素 | < vector > |
列表(list) | 由节点组成的双向链表,每个结点包含着一个元素 | < list > |
双向队列(deque) | 连续存储的指向不同元素的指针所组成的数组 | < deque > |
集合(set) | 由节点组成的红黑树,每个节点都包含着一个元素,节点之间以某种作用于元素对的谓词排列,没有两个不同的元素能够拥有相同的次序 | < set > |
多重集合(multiset) | 允许存在两个次序相等的元素的集合 | < set > |
栈(stack) | 后进先出的元素的排列 | < stack > |
队列(queue) | 先进先出的元素的排列 | < queue > |
优先队列(priority_queue) | 元素的次序是由作用于所存储的值对上的某种优先级决定的的一种队列 | < queue > |
映射(map) | 由{键,值}对组成的集合,以某种作用于键对上的谓词排列 | < map > |
多重映射(multimap) | 允许键对有相等的次序的映射 | < map > |