STL的三种容器适配器
容器适配器:queue、priority、stack
有序关联容器:set、map、multiset、multimap
无序关联容器:unordered_se和unordered_map/unordered_multiset和unordered_multimap
什么是容器适配器
适配器adapter,本质是添加一个中间层来转换要适配双方,c++有三种适配器:函数适配器、容器适配器、迭代适配器。函数适配器我们在前面讲过,原函数的参数列表数量不符合要求,通过二次封装,填写一些固定参数,使其对外参数列表符合要求的一种中间函数被称为函数适配器。
而容器适配器,是用已有容器来二次封装以完成更复杂的数据结构实现。对外提供操作接口,容器适配器分3种,stack(栈)、queue、priority_queue。
- stack:栈,先进后出,通常最关心压栈和弹栈操作。
- queue:队列,FIFO,通常关心入队和出队操作。
- priority_queue:优先级队列,进入按自排序式,按优先级出,通常也是关心入队和出队操作,例如我们指定从大到小排序,那么我们每入一个数据都会被排序,取的时候就会从大到小取出。
为什么有容器适配器
前面我们学习了array、vector等容器他们都是独立的,而适配器不是独立的,是基于基本容器的如array、vaector、list等,基本容器偏向于存储特性,核心是元素如何在内存中管理。栈和队列是数据结构型容器,偏重于数据操作特性,核心是元素如何按需进入和输出。所以可以认为顺序容器是底层的实现,而栈和队列是上层应用。适配器容器和栈和队列很类似,都是对底层进行封装去实现某些功能,对外留接口。
容器适配器很多时候用起来和容器完全一样,所以也可以叫做容器,当然容器适配器和容器的实现肯定是不同的,例如容器适配器对外没有迭代器,内部间接包含的有,但不支持我们去访问,主要是没有访问的必要。至于容器适配器是怎么实现的我们不用关心,只要会用即可。
stack容器适配器
基于deque实现的一个栈,头文件<stack>。
初始化
stack<int>