浅谈 C++容器原理
容器是随着面向对象语言的诞生而提出的,容器类在面向对象语言中特别重要,
甚至它被认为是早期面向对象语言的基础。在现在几乎所有的面向对象的语言
中也都伴随着一个容器集,在 C++ 中,就是标准模板库(STL )。
通用容器的分类
STL 对定义的通用容器分三类:顺序性容器、关联式容器和容器适配器。
顺序性容器 是一种各元素之间有顺序关系的线性表,是一种线性结构的可序群
集。顺序性容器中的每个元素均有固定的位置,除非用删除或插入的操作改变
这个位置。这个位置和元素本身无关,而和操作的时间和地点有关,顺序性容
器不会根据元素的特点排序而是直接保存了元素操作时的逻辑顺序。比如我们
一次性对一个顺序性容器追加三个元素,这三个元素在容器中的相对位置和追
加时的逻辑次序是一致的。
关联式容器 和顺序性容器不一样,关联式容器是非线性的树结构,更准确的说
是二叉树结构。各元素之间没有严格的物理上的顺序关系,也就是说元素在容
器中并没有保存元素置入容器时的逻辑顺序。但是关联式容器提供了另一种根
据元素特点排序的功能,这样迭代器就能根据元素的特点“顺序地”获取元素。
关联式容器另一个显著的特点是它是以键值的方式来保存数据,就是说它能把
关键字和值关联起来保存,而顺序性容器只能保存一种(可以认为它只保存关
键字,也可以认为它只保存值)。这在下面具体的容器类中可以说明这一点。
容器适配器 是一个比较抽象的概念, C++的解释是:适配器是使一事物的行
为类似于另一事物的行为的一种机制。容器适配器是让一种已存在的容器类型
采用另一种不同的抽象类型的工作方式来实现的一种机制。其实仅是发生了接
口转换。那么你可以把它理解为容器的容器,它实质还是一个容器,只是他不
依赖于具体的标准容器类型,可以理解是容器的模版。或者把它理解为容器的