容器适配器
一、栈:stack
- 一种运算受限的线性表,仅在表尾进行插入和删除操作的线性表
- 默认底层容器是deque,array/forwar_list[×]
- 常用接口:
stack() 构造空的栈
empty() 检测stack是否为空
size() 返回stack中元素的个数
top() 返回栈顶元素的引用
push() 将元素val压入stack中
pop() 将栈顶元素弹出
二、队列:queue
- 一种操作受限制的线性表,只允许在表的前端(front)进行删除操作,而在表的后端(back)进行插入操作
- 默认底层容器是deque,vector[×]
- 常用接口:
queue() 构造空的队列
empty() 检测队列是否为空,是返回true,否则返回false
size() 返回队列中有效元素的个数
front() 返回队头元素的引用
back() 返回队尾元素的引用
push() 在队尾将元素val入队列
pop() 将队头元素出队列
三、优先队列: priority_queue
-
优先级队列的底层是堆(默认建的是大堆),每次插入删除数据都会进行调整
-
默认用的是vector,list[×]
-
常用接口:
constructor(构造函数) 用法
priority_queue() 空的优先级队列
priority_queue(Iterator first, Iterator last) 迭代器区间进行构造
empty() 判断优先级队列是否为空
size() 计算队列中元素个数
top() 取队列中优先级最高的元素(队头元素)
push() 从队尾插入元素
pop() 删除优先级最高的元素(队头的元素) -
定义:priority_queue<Type, Container, Functional>
Type:数据类型
Container :容器类型(Container必须是用数组实现的容器,比如vector,deque等等,但不能用 list。STL里面默认用的是vector)
Functional:比较的方式
当需要用自定义的数据类型时才需要传入这三个参数,使用基本数据类型时,只需要传入数据类型,默认是大顶堆。
思考:栈内元素在内存中是连续分布的吗?
- 栈是容器适配器,底层容器使用不同的容器,决定了栈内数据在内存中是不是连续分布的;
- 在默认情况下,默认底层容器是deque,deque在内存中的数据分布是不连续的;