【C++】 蓝桥必备-STL<Part 3-queue>

120 阅读1分钟

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;  // 定义一个小根堆

③ 共有函数

  1. push();  // 往队尾插入一个元素
  2. pop();  // 队列:把队头弹出       优先队列 :弹出堆顶元素
  3. size();  // 这个队列的长度
  4. 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; 

image.png

①至④运行截图

附全文代码

#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;
}