C++顺序容器的底层能够模拟一些常见的数据结构,方法是通过容器适配器。
队列(queue)只允许在一端插入数据操作,在另一端进行删除数据操作的特殊线性表;进行插入操作的一端称为队尾(入队列),进行删除操作的一端称为队头(出队列);队列具有先进先出(FIFO)的特性。(插入和删除操作在不同端口);
堆栈(stack)插入和删除操作都在同一端进行,像是容器,只允许在顶部进行操作,因此操作端口也被称为栈顶(top)。其特点是后进先出(LIFO);
优先队列(priority_queue)中的每个元素都有优先级,而优先级高(或者低)的将会先出队,而优先级相同的则按照其在优先队列中的顺序依次出队。
队列插入删除分属两个不同的端口,堆栈则是同一端口。
顺序容器中有些容器对pop_back
和pop_front
支持度不一样,有些只支持其中的一种,或者一个都不支持(array
),需要注意的是,他们都不返回被处理的元素,有些事物可能需要在弹出的同时返回这个数据,这就让用户提前存好这个数据的额外操作,那么有没有一种更加简单的方法?有的,那就是容器适配器!
标准库定义了三个顺序容器适配器stack
queue
priority_queue
。适配器是标准库中的一个通用概念。容器、迭代器和函数都有适配器。适配器就是数据结构,数据结构需要建立在容器之上。所以要求容器能够满足适配器抽象需求的功能
适配器有以下操作:
操作含义empty()是否为空size()适配器大小swap() swap(a,b)交换A a默认构造A a(b)拷贝构造对于适配器支持的顺序容器:
适配器类/顺序容器类型arrayvectordequelistforward_liststack × \boldsymbol \times × ✓ \checkmark ✓ ✓ \checkmark ✓(默认) ✓ \checkmark ✓ × \boldsymbol \times ×queue × \boldsymbol \times × × \boldsymbol \times × ✓ \checkmark ✓(默认) ✓ \checkmark ✓ × \boldsymbol \times ×priority_queue × \boldsymbol \times × ✓ \checkmark ✓(默认) × \boldsymbol \times × × \boldsymbol \times × × \boldsymbol \times × 一、栈适配器栈(stack)是限定只在表尾进行插入和删除操作的一种线性表。允许插入或删除的那一端称为栈顶(top),另一端叫做栈底(bottom)。后进先出(Last In First out,LIFO)最能形容栈的特点。通常意义上说,栈支持以下操作:
- 压入栈顶(push)
- 删除栈顶(pop)
- 访问栈顶(top)
C++可以直接使用vector进行等价实现,push_back(push),top(back()),pop_back(pop)看上去非常不直观,而且用户可能会利用vector的其他操作破坏这种栈机制。头文件#include
适配器会限制一些功能以达到用户想要的数据结构,为什么叫做适配器,因为它将一个通用容器,适配成我们想要的结构。不是所有的顺序容器都能适配,stack需要满足以下条件:
- push_back
- pop_back
- back
stack适配器有两个构造函数,一是默认构造函数,二是接受一个容器,拷贝初始化这个stack.
定义stack适配器实例:
#include
#include
#include
using namespace std;
int main()
{
std::stack s;//默认构造
s.push(3);
s.push(4);
s.push(5);
s.pop();
std::cout
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?