本文主要讨论C++标准库中的顺序容器及相应的容器适配器,这些内容主要涉及顺序容器类型:vector、list、deque,顺序容器适配器类型:stack、queue、priority_queue。
标准库中的容器分为顺序容器和关联容器。顺序容器(sequential container)内的元素按其位置存储和访问,顾名思义,这些内部元素是顺序存放的;顺序容器内的元素排列次序与元素值无关,而是由元素添加到容器里的次序决定。而关联容器的元素按键(key)排序。
标准库中的容器分为顺序容器和关联容器。顺序容器(sequential container)内的元素按其位置存储和访问,顾名思义,这些内部元素是顺序存放的;顺序容器内的元素排列次序与元素值无关,而是由元素添加到容器里的次序决定。而关联容器的元素按键(key)排序。
容器类共享部分公共接口。标准库定义的三种顺序容器类型:vector、list、deque(double-ended queue的缩写,发音为“deck”),它们的差别仅在访问元素的方式,以及添加或删除元素相关操作的代价。顺序容器适配器包括:stack、queue和priority_queue。容器只定义了少量操作,大多数操作由算法库提供。如果两个容器提供了相同的操作,则它们的接口(函数名和参数个数)应该相同。
标准容器类 | 说明 |
顺序性容器 | |
vector | 从后面快速的插入与删除,直接访问任何元素 |
deque | 从前面或后面快速的插入与删除,直接访问任何元素 |
list | 双链表,从任何地方快速插入与删除 |
关联容器 | |
set | 快速查找,不允许重复值 |
multiset | 快速查找,允许重复值 |
map | 一对多映射,基于关键字快速查找,不允许重复值 |
multimap | 一对多映射,基于关键字快速查找,允许重复值 |
容器适配器 | |
stack | 后进先出 |
queue | 先进先出 |
priority_queue | 最高优先级元素总是第一个出列 |
容器类型
vector | 容器,支持快速随机访问(连续存储) |
list | 链表,支持快速插入/删除 |
deque | 双端队列,支持随机访问(连续存储),两端能快速插入和删除 |
stack | 栈 |
queue | 队列 |
priority_queue | 优先级队列 |
顺序容器的定义
顺序容器的构造和初始化
下表为迭代器为所有容器类型所提供的运算:
*iter | 返回类型iter所指向的元素的引用 |
iter->mem | 对iter进行解引用,并取得指定成员 |
++iter | 给iter加1,使其指向容器中下一个元素 |
iter++ | |
--iter | 给iter减1,使其指向容器中前一个元素 |
iter-- | |
iter1 == iter2 | 当两个迭代器指向同一个容器中的同一元素,或者当它们都指向 |