当前位置: 首页 > news >正文

stack,queue和priority_queue

1. stack

1.1 stack 的介绍

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

容器适配器,也就是使用特定容器类的封装对象作为其底层容器,提供一组特定的成员函数来访问其元素。

底层容器可以是任何标准容器类模板或一些其他专门设计的容器类。底层容器应该支持一下操作:

  • empty
  • size
  • back
  • push_back
  • pop_back

一般都是用 vector 或 list 去适配,但是这两个容器都是各有优劣,于是 C++ 把二者的优点合二为一设计出了 deque。

1.2 stack 的使用

1. push(const T& x)

将元素 x 压入栈中。

2. pop()

把栈顶元素弹出。

3. size()

返回栈中元素个数。

4. top()

返回栈顶元素。

5. empty()

判断栈是否为空。

#include<stack>
#include<iostream>using namespace std;int main()
{stack<int> st;for (int i = 0; i < 4; i++){st.push(i + 1);}cout << st.size() << endl;while (!st.empty()){cout << st.top() << ' ';st.pop();}cout << endl;return 0;
}

2. queue

2.1 queue 的介绍

队列也是一种容器适配器,专门设计用于在FIFO(先进先出)中操作,其中元素插入容器的一端并从另一端提取。

2.2 queue 的使用

queue 的用法和 stack 的用法,大差不差。

1. push(const T& x)

将元素 x 入队。

2. pop()

将队头元素出队。

3. size()

返回队列中元素个数。

4. back()

返回队尾元素。

5. front()

返回对头元素。

6. empty()

判断队列是否为空。

#include<queue>
#include<iostream>using namespace std;int main()
{queue<int> q;for (int i = 0; i < 4; i++){q.push(i + 1);}cout << q.size() << endl;cout << q.back() << endl;while (!q.empty()){cout << q.front() << ' ';q.pop();}cout << endl;return 0;
}

3. priority_queue

3.1 priority_queue 的介绍

优先级队列也是一种容器适配器,它是由堆这种数据结构封装的,是严格按照顺序来存放数据的。

默认是大堆,可以用 greater 类去改变成小堆。

3.2 priority_queue 的使用

和栈几乎没有区别。

1. push(const T& x)

将元素 x 入堆

2. pop()

删除堆中最小元素或最大元素(根据初始化时决定)。

3. size()

返回堆中元素个数。

4. top()

返回堆中最小元素或最大元素(根据初始化时决定)。

5. empty()

判断堆是否为空。

#include<queue>
#include<deque>
#include<iostream>using namespace std;int main()
{priority_queue<int> pq1;for (int i = 0; i < 4; i++){pq1.push(i + 1);}cout << pq1.size() << endl;while (!pq1.empty()){cout << pq1.top() << ' ';pq1.pop();}cout << endl;priority_queue<int, vector<int>, greater<int>> pq2;// 这里可以用 vector/deque 都可以for (int i = 0; i < 4; i++){pq2.push(i + 1);}cout << pq2.size() << endl;while (!pq2.empty()){cout << pq2.top() << ' ';pq2.pop();}cout << endl;return 0;
}

相关文章:

  • Java @Serial 注解深度解析
  • MATLAB 控制系统设计与仿真 - 39
  • JDBC 数据库连接全解析:从驱动配置到工具类封装
  • 《JVM考古现场(二十三):归零者·重启奇点的终极奥义》
  • 若依(笔记)
  • React-请勿在循环或者条件语句中使用hooks
  • 触发器(详解)
  • LNA设计
  • linux学习 5 正则表达式及通配符
  • .net core web api 数据验证(DataAnnotations)
  • Python concurrent包介绍
  • 19-算法打卡-哈希表-四数相加II-leetcode(454)-第十九天
  • leetcode哈希表(六)-三数相加
  • C++ 数学算法全解析(二):解方程与三角函数实用指南
  • deekseak 本地windows 10 部署步骤
  • 网络编程 - 4 ( TCP )
  • RoBoflow数据集的介绍
  • 对美团leaf的初步学习
  • 深度解析 SOA:架构原理、核心优势与实践挑战
  • Firewalld防火墙
  • 事故调查报告:东莞一大楼装修项目去年致1人死亡,系违规带电作业
  • 新片|真人版《星际宝贝史迪奇》5月23日与北美同步上映
  • 中国与柬埔寨签署产供链经济合作谅解备忘录
  • 重点并不在于设计更聪明的机器,而在于开发宇宙技术的多样性
  • 新华社经济随笔:把握不确定性中的确定性
  • 用户称被冒用身份证异地办卡申请注销遭拒,澎湃介入后邯郸联通着手办理剥离