C++ STL(1)
from my csdn blog
C++标准模板库
-
容器
- C++标准模板库提供了10种容器
- 基于数据结构
- 数据的逻辑结构
- 线性
- 非线性
- 数据的存储结构
- 顺序存储:把数据存储与一段连续地址空间的内存中
- 链式存储:使用节点(数据域+指针域),通过指针关联衔接。在存储中不一定相邻
- 数据的操作
- 操作定义于数据的逻辑结构上,具体实现与存储结构相关。
- 常用操作:访问元素、统计个数、更新、插入、删除、查找、排序
- 数据的逻辑结构
- 线性表
- 栈(stack)
- 队列(queue)
- 优先队列(priority queue)
- 优先级队列是队列的一种形式,它是对每次插入队列后的数据按某种规则进行排序,每次删除的均是优先级最高的数据元素。
- 树:有层次关系
- 二叉树
- 堆
- 图
- 无层次关系,每个元素有多个前驱和后继
- 数组、矩阵
-
C++容器
- 在数据存储上,有一种对象类型,它可以持有其它对象或指向其它对像的指针,这种对象类型就叫做容器。
- 用于保存其他对象的对象,并且这种对象还包含一系列处理其他对象的方法。
- 可容器是随着面向对象语言的诞生而提出的,容器类在面向对象语言中特别重要,在现在几乎所有的面向对象的语言中也都伴随着一个容器集。以自行扩展(自行申请释放内存,并用最优的算法来执行命令)
-
通用容器
- 顺序性容器
- 是一种各元素之间有顺序关系的线性表,是一种线性结构的可序群集。顺序性容器中的每个元素均有固定的位置,除非用删除或插入的操作改变这个位置。这个位置和元素本身无关,而和操作的时间和地点有关,顺序性容器不会根据元素的特点排序而是直接保存了元素操作时的逻辑顺序。比如我们一次性对一个顺序性容器追加三个元素,这三个元素在容器中的相对位置和追加时的逻辑次序是一致的。
- 关联式容器
- 和顺序性容器不一样,关联式容器是非线性的树结构,更准确的说是二叉树结构。各元素之间没有严格的物理上的顺序关系,也就是说元素在容器中并没有保存元素置入容器时的逻辑顺序。但是关联式容器提供了另一种根据元素特点排序的功能,这样迭代器就能根据元素的特点“顺序地”获取元素。
- 关联式容器另一个显著的特点是它是以键值的方式来保存数据,就是说它能把关键字和值关联起来保存,而顺序性容器只能保存一种(可以认为它只保存关键字,也可以认为它只保存值)。这在下面具体的容器类中可以说明这一点。
- 容器适配器
- 容器适配器是一个比较抽象的概念,C++的解释是:适配器是使一事物的行为类似于另一事物的行为的一种机制。
- 容器适配器是让一种已存在的容器类型采用另一种不同的抽象类型的工作方式来实现的一种机制。其实仅是发生了接口转换。那么你可以把它理解为容器的容器,它实质还是一个容器,只是他不依赖于具体的标准容器类型,可以理解是容器的模版。或者把它理解为容器的接口,而适配器具体采用哪种容器类型去实现,在定义适配器的时候可以由你决定。
- 顺序性容器
-
标准容器类
- 顺序性容器
- vector
- 从后面快速的插入与删除,直接访问任何元素
- deque
- 从前面或后面快速的插入与删除,直接访问任何元素
- list
- 双链表,从任何地方快速插入与删除
- vector
- 关联容器
- set
- 快速查找,不允许重复值
- multiset
- 快速查找,允许重复值
- map
- 一对多映射,基于关键字快速查找,不允许重复值
- multimap
- 一对多映射,基于关键字快速查找,允许重复值
- set
- 容器适配器
- stack
- 后进先出
- queue
- 先进先出
- priority_queue
- 最高优先级元素总是第一个出列
- stack
- 顺序性容器
网友评论