queue,队列,实现一个 先进先出 的容器
1. 定义
queue<typename> q;
2. 访问
front() 访问 队首 元素,back() 访问 队尾 元素
#include <stdio.h>
#include <queue>
using namespace std;
int main(){
queue<int> q;
for(int i = 1; i <= 5; i++){
q.push(i);
}
printf("%d %d\n", q.front(), q.back());
return 0;
}
3. 常用函数
(1)push()
push(x),将 x 进行入队
(2)front()、back()
获取队首元素和队尾元素
(3)pop()
令队首元素出队
#include <stdio.h>
#include <queue>
using namespace std;
int main(){
queue<int> q;
for(int i = 1; i <= 5; i++){
q.push(i); // 依次入队 1 2 3 4 5
}
for(int i = 1; i <= 3; i++){
q.pop(); // 出队首元素3次,依次是1 2 3
}
printf("%d\n", q.front());
return 0;
}
(4)empty()
检测 queue 是否为空,返回 true 空,false 非空
#include <stdio.h>
#include <queue>
using namespace std;
int main(){
queue<int> q;
if(q.empty() == true){
printf("Empty\n");
}else{
printf("Not Empty\n");
}
q.push(1);
if(q.empty() == true){
printf("Empty\n");
}else{
printf("Not Empty\n");
}
return 0;
}
(5)size()
返回 queue 内元素的个数
#include <stdio.h>
#include <queue>
using namespace std;
int main(){
queue<int> q;
for(int i = 1; i <= 5; i++){
q.push(i);
}
printf("%d\n", q.size());
return 0;
}
4. 常见用途
需要实现广度优先搜索时,可以不用自己手动实现一个队列,而是用 queue 作为代替,以提高程序的准确性。
注意:在使用 front() 和 pop() 函数之前,必须用 empty() 判断队列是否为空
延申:双端队列(deque)首尾皆可插入和删除
优先队列(priority_queue)使用堆实现的默认将当前队列最大元素置于队首的容器。
——摘抄自《算法笔记》