Queue简介
queue是队列容器,是一种“先进先出”的容器。
排队给粉丝打电话的圣诞老人,前面打完电话走后,才轮到下一个位.
默认情况下queue是利用deque容器实现的一种容器。
它只允许在队列的前端(front)进行删除操作,而在队列的后端(back)进行插入操作
#include <queue> queue容器和优先级队列priority_queue所需要包含的头文件
queue对象的默认构造
queue采用模板类实现,queue对象的默认构造形式:queue<T> queT;
例如:
queue<int> queueInt; //一个存放int的queue容器。
queue<float> queueFloat; //一个存放float的queue容器。
queue<string> queueString; //一个存放string的queue容器。
注意: 尖括号内还可以设置指针类型或自定义类型。
queue 对象的带参构造
queue<int, list<int>> queueList; //内部使用list 来存储队列元素的queue 容器.
错误: queue<int, vector<int>> queueList; //内部不能使用vector来存储队列元素
queue的push()与pop()方法
queue.push(elem); 往队尾添加元素
queue.pop(); 从队头处移除队首元素
queue对象的拷贝构造与赋值
queue(const queue &que); 拷贝构造函数
queue& operator=(const queue &que); 重载等号操作符
queue的数据存取
queue.back(); 返回最后一个元素
queue.front(); 返回第一个元素
queue的大小
queue.empty(); 判断队列是否为空
queue.size(); 返回队列的大小
优先级队列priority_queue
英雄联盟游戏里面防御塔都有一个自动攻击功能,小兵排着队进入防御塔的攻击范围,防御塔先攻击靠得最近的小兵,这时候大炮车的优先级更高(因为系统判定大炮车对于防御塔的威胁更大),所以防御塔会优先攻击大炮车。而当大炮车阵亡,剩下的全部都是普通小兵,这时候离得近的优先级越高,防御塔优先攻击距离更近的小兵。
优先队列: 它的入队顺序没有变化,但是出队的顺序是根据优先级的高低来决定的。优先级高的优先出队。
- 最大值优先级队列、最小值优先级队列
- 用来开发一些特殊的应用
priority_queue<int> p_que; 默认情况下是值越大,优先级越大
priority_queue<int, vector<int>, greater<int>> p_que; 使用 vector 值越小,优先级越大
priority_queue<int, deque<int>, greater<int>> p_que; 使用deque 值越小,优先级越大
priority_queue<int, list<int>, greater<int>> p_que; 不可以使用list,不兼容