前面的部分介绍了好几种类型的容器,除了在通用框架下工作的容器外,STL还提供了容器来适应特殊的情形。这些容器称为容器适配器(Container Adapters),适合于标准的STL容器在特定的环境中其作用。这些三种容器适配器为:
- 栈(Stacks)
- 队列(Queues)
- 优先队列(Priority Queues)
容器适配器不支持任何类型的迭代器,即迭代器不能用于这些类型的容器,接下来描述两种类型的容器适配器:栈和队列
一、栈(Stack)
栈是一个非常重要的数据结构,STL提供了实现栈的类,定义栈的类名为stack,包含类stack定义的头文件名是<stack>。下表定义了stack容器类支持的各种操作。
除了size,empty,push,top和pop操作外,stack容器类提供了关系操作符用来比较两个栈,例如,关系操作符==用来决定两个栈是否相同。
下例展示了如何使用栈容器类
#include <iostream>
#include <stack>
using namespace std;
int main()
{
stack<int> intStack;
intStack.push(16);
intStack.push(8);
intStack.push(20);
intStack.push(3);
cout << "The top element of intStack: "
<< intStack.top() << endl;
intStack.pop();
cout << "After the pop operation, "
<< "the top element of intStack: "
<< intStack.top() << endl;
cout << "intStack elements: ";
while(!intStack.empty())
{
cout << intStack.top() << " ";
intStack.pop();
}
cout << endl;
return 0;
}
输出为:
二、队列(Queue)
队列也是一种非常重要的数据结构,STL提供了队列的实现类,定义队列的类名为queue,包含类queue的头文件名为<queue>。下表描述了queue容器类支持的各种操作
除了size,empty,push,front,back,pop操作外,队列容器提供了关系操作符来比较两个队列,例如,关系操作符==用来比较两个队列是否相等。
下例展示了如何使用queue容器类:
#include <iostream>
#include <queue>
using namespace std;
int main()
{
queue<int> intQueue;
intQueue.push(26);
intQueue.push(18);
intQueue.push(50);
intQueue.push(33);
cout << "The front element of intQueue: "
<< intQueue.front() << endl;
cout << "The last element of intQueue: "
<< intQueue.back() << endl;
intQueue.pop();
cout << "After the pop operation, "
<< "the front element of intQueue: "
<< intQueue.front() << endl;
cout << "intQueue elements: ";
while(!intQueue.empty())
{
cout << intQueue.front() << " ";
intQueue.pop();
}
cout << endl;
return 0;
}
输出为: