除了顺序容器,标准库还提供了三种顺序容器适配器: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
栈容器适配器支持的操作
函数 | 定义 |
---|---|
s.empty() | 如果栈为空,则返回 true,否则返回 stack |
s.size() | 返回栈中元素的个数 |
s.pop() | 删除栈顶元素的值,但不返回其值 |
s.top() | 返回栈顶元素的值,但不删除该元素 |
s.push(item) | 在栈顶压入新元素 |
队列和优先级队列支持的操作
函数 | 定义 |
---|---|
q.empty() | 如果队列为空,则返回 true,否则返回 false |
q.size() | 返回队列中元素的个数 |
q.pop() | 删除队首元素,但不返回其值 |
q.front() | 返回队首元素的值,但不删除该元素 (该操作只适用于队列) |
q.back() | 返回队尾元素的值,但不删除该元素 (该操作只适用于队列) |
q.top() | 返回具有最高优先级的元素值,但不删除该元素(该操作只适用于优先级队列) |
q.push(item) | 对于 queue,在队尾压入一个新元素,对于 priority_quue,在基于优先级的适当位置插入新元素 |
测试代码如下:
#include <iostream>
#include <string>
#include <stack>
//#include <queue>
using namespace std;
int main()
{
// number of elements we'll put in our stack
const stack<int>::size_type stk_size = 10;
stack<int> intStack; // empty stack
// fill up the stack
int ix = 0;
while (intStack.size() != stk_size)
{
// use postfix increment; want to push old value onto intStack
intStack.push(ix++); // intStack holds 0...9 inclusive
}
int error_cnt = 0;
// look at each value and pop it off the stack
while (intStack.empty() == false)
{
int value = intStack.top();
// read the top element of the stack
if (value != --ix)
{
cerr << "oops! expected " << ix << " received " << value << endl;
++error_cnt;
}
intStack.pop(); // pop the top element, and repeat
}
cout << "Our program ran with "<< error_cnt << " errors!" << endl;
return 0;
}
输出结果:
tekken@tekken:~/C++WS$ ./a.out
Our program ran with 0 errors!
网友评论