stack&&queue&&deque&&priority_queue用法详解

栈和是一种容器适配器,专门设计用于在LIFO上下文(后进先出)中操作,其中元素仅从容器的一端插入和提取。

而队列则是FIFO,其元素从队列尾部进入,头部出

栈的元素从被称作“栈顶”的位置弹出/放入,容器只允许在栈顶一段进行操作,如图所示



在c++中使用栈和队列需要#include<stack>或#include<queue>

其包含以下成员函数

size()                    返回大小

empty()               返回容器是否为空

top()                    返回顶部元素

push(element)    将element压栈或压入队列尾部

pop()                    将栈顶或队列头部元素出栈(无返回值)

emplace(element)   在堆栈或队列顶部添加一个新元素,位于当前顶层元素上方。 这个新元素是通过构造函数的参数传递参数构建的。(C++11)

swap(another)          交换两个栈或队列的内容(c++11)


双端队列

deque是双端队列,其与普通队列不同之处为双端队列可以再队列的两端插入和删除元素

其可以类似的看做添加了头尾插入和删除接口的vector

有关vector的见我另一篇博客map,set,vector,string笔记整理(C++)


优先级队列

优先级队列是以种堆结构,其元素通过某一规则(如从小到大)排列

其声明方式为priority_queue<type,container,function> pq;

其中type为元素类型,container为实现优先级队列的容器,需要注意的是,这里的容器必须是以数组实现的结构

function为比较函数,默认为less<T>,即元素是从大到小排列,每次pop会去除最大元素,如果设为greater<T>则相反

其成员函数与作用于queue相同