容器适配器(adapter)

定义适配器

每个适配器都定义有两个构造函数:

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) 交换ab的内容,ab必须有相同类型,包括底层容器类型也必须相同
a.swap(b) 同上

stack

操作解释
s.pop() 删除栈顶元素,不返回。
s.push(item) 创建一个新元素,压入栈顶,该元素通过拷贝或移动item而来
s.emplace(args) 同上,但元素由args来构造。
s.top() 返回栈顶元素,不删除。
  • 定义在<stack>头文件中。
  • stack默认基于deque实现,也可以在listvector之上实现。

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可以在listvector之上实现,priority_queue也可以用deque实现。
原文地址:https://www.cnblogs.com/Real-Ying/p/12495669.html