除了顺序容器,标准库还提供了三种顺序容器适配器:queue、priority_queue和stack。适配器(adaptor)是标准库中通用的概念,包括容器适配器、迭代器适配器和函数适配器。本质上,适配器是使一事物的行为类似于另一事物的行为的一种机制。容器适配器让一种已存在的容器类型采用另一种不同的抽象类型的工作方式实现。例如,stack(栈)适配器可使任何一种顺序容器以栈的方式工作。
适配器通用的操作和类型
size_type 一种类型,足以存储此适配器类型最大对象的长度
value_type 元素类型
container_type 基础容器的类型,适配器在此容器类型上实现
A a; 创建一个新的空适配器,命名为a
A a(c); 创建一个名为a的新适配器,初始化为容器c的副本
关系操作符 所有适配器都支持全部关系操作符:==,!=,<,<=,>,>=
使用适配器时,必须包含相关的头文件:
#include <stack> // stack adaptor
#include <queue> // both queue and priority_queue adaptors
1.适配器的初始化
stack<int> stk(deq); // copies elements from deq into stk
2.覆盖基础容器类型
默认的stack和queue都基于deque容器实现,而priority_queue则在vector容器上实现
在创建适配器时,通过将一个顺序容器指定为适配器的第二个类型实参,可覆盖其关联
的基础容器类型:
// empty stack implemented on top of vector
stack< string, vector<string> > str_stk;
// str_stk2 is implemented on top of vector and holds a copy of svec
stack< string, vector<string> > str_stk2(svec);
栈容器适配器支持的操作
s.empty() 如果栈为空,则返回true,否则返回false
s.size() 返回栈中元素的个数
s.pop() 删除栈顶元素,但不返回其值
s.top 返回栈顶元素的值,但不删除该元素
s.push(item) 在栈顶压入新元素
队列和优先级队列
队列:queue
优先级队列:priority_queue
#include <queue>
表9-24 队列和优先级队列支持的操作
q.empty() 如果队列为空,则返回true,否则返回false
q.size() 返回队列中元素的个数
q.pop() 删除队首元素,但不返回其值
q.front() 返回队首元素的值,但不删除该元素
q.back() 返回对位元素的值,但不删除该元素
该操作只适用于队列
q.top() 返回具有最高优先级的元素值,但不删除该元素
该操作只适用于优先级队列
q.push(item) 对于queue,在队尾压入一个新元素
对于priority_queue,在基于优先级的适当位置插入新元素