STL第三部分(queue)
✨1、queue【队列】和 priority_queue 【优先队列、堆】
① 头文件
#include <queue>
② 初始化
/* 定义方式:
queue <类型> 变量名
priority_queue <类型> 变量名;
*/
queue <int> q1;
priority_queue <int> q2; // 默认为大根堆
std::priority_queue<int, vector<int>, less<int>> min_heap; // 定义一个小根堆
③ 共有函数
- push(); // 往队尾插入一个元素
- pop(); // 队列:把队头弹出 优先队列 :弹出堆顶元素
- size(); // 这个队列的长度
- empty(); //用于判断这个队列是否为空
q1.push(10);
q1.push(20);
q1.push(2);
q1.push(95);
std::cout << "q1.size:" << q1.size() << endl;
std::cout << "q1.empty:" << q1.empty() << endl;
q1.pop();
std::cout << "删除队列第一个元素后:q1.size:" << q1.size() << endl;
④ 区别
队列:
q1.front(); // 返回队头元素
q1.back(); // 返回队尾元素
优先队列:
q.top();// 返回堆顶元素
std::cout << "队列第一个元素:q1.front:" << q1.front() << endl;
std::cout << "队列最后一个元素:q1.back:" << q1.back() << endl;
// 初始化一个小根堆
min_heap.push(1);
min_heap.push(3);
min_heap.push(7);
min_heap.push(2);
min_heap.push(5);
std::cout << "堆顶元素:min_heap.top:" << min_heap.top() << endl;
①至④运行截图
附全文代码
#include <iostream>
#include <queue>
using namespace std;
int main(){
/* 定义方式:
queue <类型> 变量名
priority_queue <类型> 变量名;
*/
queue <int> q1;
priority_queue <int> q2; // 默认为大根堆
std::priority_queue<int, vector<int>, less<int>> min_heap; // 定义一个小根堆
/*
通过将第二个模板参数指定为std::vector<int>
并使用第三个模板参数std::less<int>来指定小根堆的比较方式 ,大根堆为 greater<int>
*/
q1.push(10);
q1.push(20);
q1.push(2);
q1.push(95);
std::cout << "q1.size:" << q1.size() << endl;
std::cout << "q1.empty:" << q1.empty() << endl;
q1.pop();
std::cout << "删除队列第一个元素后:q1.size:" << q1.size() << endl;
std::cout << "队列第一个元素:q1.front:" << q1.front() << endl;
std::cout << "队列最后一个元素:q1.back:" << q1.back() << endl;
// 初始化一个小根堆
min_heap.push(1);
min_heap.push(3);
min_heap.push(7);
min_heap.push(2);
min_heap.push(5);
std::cout << "堆顶元素:min_heap.top:" << min_heap.top() << endl;
while (!min_heap.empty()){
std::cout << min_heap.top() << " ";
min_heap.pop();
};
return 0;
}