除了顺序容器外,标准库还定义了三个顺序容器适配器:stack、queue、priority_queue。
适配器是标准库中的一个通用概念,容器、迭代器和函数都有适配器。本质上,一个适配器是一种机制,能使某种事物的行为看起来像另外一种事物。一个容器适配器接受一种已有的容器类型,使其行为看起来像一种不同的类型。

每个适配器都定义两个构造函数:
默认情况下,stack 和 queue 是基于 deque 实现的,priority_queue 是在 vector 之上实现的。
可以在创建一个适配器时将一个命名的顺序容器作为第二个参数来重载默认容器类型。
//在vector上实现的空栈
stack<string, vector<string>> str_stk;
//str_stk2在vector上实现,初始化时保存svec的拷贝
stack<string, vector<string>> str_stk2(svec);
对于一个给定的适配器,可以使用哪些容器是有限制的。
array 之上。类似的,也不能用 forward_list 来构造容器适配器,因为所有适配器都要求容器具有添加、删除以及访问尾元素的能力。stack 只要求 push_back、pop_back 和 back 操作,因此可以使用除 array 和 forward_list 之外的任何容器类型来构造。queue 要求 back、push_back、front、push_front,因此它可以构建在 list 和 deque 之上,但不能基于 vector 构造。priority_queue 除了 front、push_back、pop_back 操作之外还要求随机访问能力,因此可以构造于vector 或 queue 之上,但不能基于 list 构造。每个容器适配器都基于底层容器类型的操作定义自己的特殊操作,使用时只可以使用适配器操作,而不能使用底层容器类型的操作。
stack 类型定义在 stack 头文件中。

stack<int> intStack;
for (size_t ix = 0; ix != 10; ++ix)
intStack.push(ix);
while (!intStack.empty())
{
int value = intStack.top();
intStack.pop();
}
queue 和 priority_queue 适配器定义在 queue 头文件中。


priority_queue 允许在队列中的元素创立优先级。新加入的元素会安排在所有优先级比它低的已有元素之前。默认情况下,标准库在元素类型上使用 < 运算符来确定相对优先级。
原文:https://www.cnblogs.com/xiaojianliu/p/12497252.html