stack(栈)
FILO(先进后出)
底层通过deque实现
template<class _Ty,
class _Container = deque<_Ty> >
class stack
栈是限制插入和删除只能在一个位置上进行的线性表,该位置在表的末端,叫做栈顶。添加元素只能在尾节点后添加,删除元素只能删除尾节点,查看节点也只能查看尾节点。添加、删除、查看依次为入栈(push)、出栈(pop)、栈顶节点(top)。
在树的前中后序迭代遍历中常用到。
queue(队列)
FIFO(先进先出)
底层通过deque实现
template<class _Ty,
class _Container = deque<_Ty> >
class queue
- 在队尾添加元素,在队头删除元素。
- 队头与队尾: 允许元素插入的一端称为队尾,允许元素删除的一端称为队头;
- 入队:队列的插入操作,通常命名为push()。
- 出队:队列的删除操作,通常命名为pop()。
常用在层序遍历的类型中
priority_queue(优先队列)
底层通过vector实现
template<class _Ty,
class _Container = vector<_Ty>,
class _Pr = less<typename _Container::value_type> >
class priority_queue
- 作为队列的一个延伸,优先队列包含在头文件include# < queue > 中。
- O(log n) 的效率查找一个队列中的最大值或者最小值
- 默认是大顶堆
构造一个空的优先队列(此优先队列默认为大顶堆) priority_queue big_heap;
另一种构建大顶堆的方法 priority_queue<int,vector,less > big_heap2;
小顶堆
//构造一个空的优先队列,此优先队列是一个小顶堆
priority_queue<int,vector,greater > small_heap;
需要注意的是,如果使用less< int >和greater< int >,需要头文件:
#include < functional>
注意:
以上三种适配器均不支持随机访问,即不支持[] 和at()
之所以称之为容器适配器是因为其底层通过其他容器实现,是为了实现某种特别功能而构建的