C++(初阶)(十二)——stack和queue
十二,stack和queue
- 十二,stack和queue
- Stack
- Queue
- priority_queue
- 简单使用
- 模拟实现
- deque
Stack
函数 | 说明 |
---|---|
stack() | 构造空栈 |
empty() | 判断栈是否为空 |
size() | 返回栈的有效元素个数 |
top() | 返会栈顶元素的引用 |
push() | 将所给元素val压入栈中 |
pop() | 将栈的尾部元素弹出 |
Queue
函数 | 说明 |
---|---|
queue() | 构造的队列 |
empty() | 判空 |
size() | 返回队列有效元素个数 |
front() | 返回队头元素的引用 |
back() | 返回队尾元素的引用 |
push() | 在队尾将元素val入队 |
pop() | 队头元素出队 |
priority_queue
函数 | 说明 |
---|---|
priority_queue();/,priority_queue(first,last); | 构造空的优先级队列 |
empty(); | 判断优先级队列是否为空,是返回true,否 则返回false |
top(); | 返回优先级队列中最大(最小元素),即堆顶元素 |
push(x); | 在优先级队列中插入元素x |
pop(); | 删除优先级队列中最大(最小)元素,即堆顶元素 |
1,优先队列是一种容器适配器,默认排序是降序,它的第一个元素总是它所包含的元素中最大的。
2,底层结构类似堆,可以随时插入元素,可以取堆顶元素,默认是最大的元素。
3,优先队列被实现为容器适配器,容器适配器即将特定容器类封装作为其底层容器类,queue 提供一组特定的成员函数来访问其元素。元素从特定容器的“尾部”弹出,其称为优先队列的顶部。
4,底层容器可以是任何标准容器类模板,也可以是其他特定设计的容器类。
默认使用vector作为其底层存储数据的容器。
容器应该可以通过 随机访问迭代器访问,并支持以下操作:
函数 | 说明 |
---|---|
empty(): | 检测容器是否为空 |
size(): | 返回容器中有效元素个数 |
front(): | 返回容器中第一个元素的引用 |
push_back(): | 在容器尾部插入元素 |
pop_back(): | 删除容器尾部元素 |
5,默认情况下priority_queue是大堆。
简单使用
stack_queue_4_18
模拟实现
stack_queue_4_16
deque
优点:1,头尾插入删除,效率很高
2,下标随机访问效率也还可以,但是比vector的效率低。
缺点:1,中间的插入删除需要全部挪动,效率很低。
(不可以对单个buff扩容,因为会影响+=操作的访问)
2,对比vector,list没有极致的优点