定义适配器
每个适配器都定义有两个构造函数:
1.默认构造函数,创建一个空对象;deque<int> deq;
2.接收一个容器的构函拷贝该容器来初始化适配器;stack<int> stk(deq); //将deq的元素拷贝给stack进行初始化,stack的默认基础容器可以是deque
基础容器:每个适配器的基础容器是有限制的,限制依据是适配器容器所需要的操作p355
创建适配器时,可指定一个顺序容器作为第二参数(第一参数是该容器的元素类型)覆盖默认的基础容器: stack<string, vector<string> > str_stk;
所有适配器的通用类型和操作
操作 | 解释 |
---|---|
size_type |
一种类型,须以保存当前类型的最大对象的大小 |
value_type |
元素类型 |
container_type |
实现适配器的底层容器类型 |
A a; |
创建一个名为a 的空适配器 |
A a(c) |
创建一个名为a 的适配器,带有容器c 的一个拷贝 |
关系运算符 | 每个适配器都支持所有关系运算符:== 、!= 、< 、 <= 、> 、>= 这些运算符返回底层容器的比较结果 |
a.empty() |
若a 包含任何元素,返回false ;否则返回true |
a.size() |
返回a 中的元素数目 |
swap(a, b) |
交换a 和b 的内容,a 和b 必须有相同类型,包括底层容器类型也必须相同 |
a.swap(b) |
同上 |
stack
操作 | 解释 |
---|---|
s.pop() |
删除栈顶元素,不返回。 |
s.push(item) |
创建一个新元素,压入栈顶,该元素通过拷贝或移动item 而来 |
s.emplace(args) |
同上,但元素由args 来构造。 |
s.top() |
返回栈顶元素,不删除。 |
- 定义在<
stack>
头文件中。 stack
默认基于deque
实现,也可以在list
或vector
之上实现。
queue和priority_queue
操作 | 解释 |
---|---|
q.pop() |
删除队首元素,但不返回。 |
q.front() |
返回队首元素的值,不删除。 |
q.back() |
返回队尾元素的值,不删除。只适用于queue |
q.top() |
返回具有最高优先级的元素值,不删除。 |
q.push(item) |
在队尾压入一个新元素。 |
q.emplace(args) |
- 都定义在<
queue>
头文件中。 - priority_queue允许我们为队列中的元素建立优先级,新加入的元素会排在所有优先级比它低的已有元素之前。(相对优先级由元素类型的<运算符重载确定)
queue
默认基于deque
实现,priority_queue
默认基于vector
实现。queue
可以在list
或vector
之上实现,priority_queue
也可以用deque
实现。