C++中容器概念

STL 将通用容器分为三类:顺序性容器、关联式容器和容器适配器

Posted by ZA on July 12, 2024

什么是容器?

在C++中容器被定义为:在数据存储上,有一种能够 自行扩展 的对象类型,它可以持有其它对象或指向其它对象的指针。

具体来说,容器是一种保存其它对象的对象,并包括了一系列处理“其它对象”的方法。


分类

STL 对定义的通用容器分三类:顺序性容器、关联式容器和容器适配器。

顺序性容器 特点
vector 从后面快速的插入与删除,直接访问任何元素
deque 从前面或后面快速的插入与删除,直接访问任何元素
list 双链表,从任何地方快速插入与删除

顺序性容器: 一种线性表结构,各元素之间按逻辑排序。

其中的每个元素都有固定的位置,且这个位置和 元素本身无关。顺序性容器不会根据元素的特点进行排序,而是直接保存了元素操作时的逻辑顺序(时间地点)。

例如,向一个顺序性容器一次性追加三个元素,这三个元素在容器中的相对位置和追加时的逻辑次序是一致的。

关联容器 特点
set 快速查找,不允许重复值
multiset 快速查找,允许重复值
map 一对多映射,基于关键字快速查找,不允许重复值
multimap 一对多映射,基于关键字快速查找,允许重复值

关联式容器: 一种非线性的二叉树结构,各元素之间按特点排序。

各元素之间没有严格的物理上的顺序关系。关联式容器并没有保存元素置入容器时的逻辑顺序,而是提供了另一种根据元素特点排序的功能,这样迭代器就能根据元素的特点“顺序地”获取元素。

另一个显著的特点是以键值方式实现的保存数据,从而将关键字和值关联起来保存,而顺序性容器只能保存一种(可以认为它只保存关键字,也可以认为它只保存值)。

容器适配器 特点
stack 后进先出
queue 先进先出
priority_queue 最高优先级元素总是第一个出列

容器适配器: 一种让其它容器改变工作方式的机制,是容器的容器

C++中的解释是:适配器是使一事物的行为类似于另一事物的行为的一种机制。它本质上是一个容器,但不依赖于具体的标准容器类型,可以理解为是容器的接口。而适配器底层具体采用哪种容器类型去实现,可以在定义的时候自行决定。