什么是容器?
在C++中容器被定义为:在数据存储上,有一种能够 自行扩展 的对象类型,它可以持有其它对象或指向其它对象的指针。
具体来说,容器是一种保存其它对象的对象,并包括了一系列处理“其它对象”的方法。
分类
STL 对定义的通用容器分三类:顺序性容器、关联式容器和容器适配器。
顺序性容器 | 特点 |
---|---|
vector | 从后面快速的插入与删除,直接访问任何元素 |
deque | 从前面或后面快速的插入与删除,直接访问任何元素 |
list | 双链表,从任何地方快速插入与删除 |
顺序性容器: 一种线性表结构,各元素之间按逻辑排序。
其中的每个元素都有固定的位置,且这个位置和 元素本身无关。顺序性容器不会根据元素的特点进行排序,而是直接保存了元素操作时的逻辑顺序(时间地点)。
例如,向一个顺序性容器一次性追加三个元素,这三个元素在容器中的相对位置和追加时的逻辑次序是一致的。
关联容器 | 特点 |
---|---|
set | 快速查找,不允许重复值 |
multiset | 快速查找,允许重复值 |
map | 一对多映射,基于关键字快速查找,不允许重复值 |
multimap | 一对多映射,基于关键字快速查找,允许重复值 |
关联式容器: 一种非线性的二叉树结构,各元素之间按特点排序。
各元素之间没有严格的物理上的顺序关系。关联式容器并没有保存元素置入容器时的逻辑顺序,而是提供了另一种根据元素特点排序的功能,这样迭代器就能根据元素的特点“顺序地”获取元素。
另一个显著的特点是以键值方式实现的保存数据,从而将关键字和值关联起来保存,而顺序性容器只能保存一种(可以认为它只保存关键字,也可以认为它只保存值)。
容器适配器 | 特点 |
---|---|
stack | 后进先出 |
queue | 先进先出 |
priority_queue | 最高优先级元素总是第一个出列 |
容器适配器: 一种让其它容器改变工作方式的机制,是容器的容器
C++中的解释是:适配器是使一事物的行为类似于另一事物的行为的一种机制。它本质上是一个容器,但不依赖于具体的标准容器类型,可以理解为是容器的接口。而适配器底层具体采用哪种容器类型去实现,可以在定义的时候自行决定。