STL---queue
queue常用API
再谈队列
回顾一下之前所学的队列,队列和栈不同,队列是一种先进先出的数据结构,STL的队列内容极其重要,虽然内容较少但是请务必掌握,STL的队列是快速构建搜索算法以及相关的数论图论的状态存储的基础。
相关文件
头文件:#include<queue>
queue 的定义
queue<int> q; //创建一个空的没有数据的队列q
queue<int> qoo(q); //创建一个队列其元素为q的全部内容
vector<int> v(3,100);
queue<int,vector<int> > s(v); //注意,> >符号之间需要有一个空格隔开
迭代器
栈和队列都属于一种特殊的数据结构,只能通过访问顶层数据并不断剔除数据的方法进行全部访问,因此没有直接的迭代器。
常用接口
queue容器内元素的访问
//由于队列(queue)本身就是一种先进先出的限制性数据结构,因此在STL中只能通过
//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); //push(i)用以将i压入队列,因此依次入队 1 2 3 4 5
}
printf("%d %d\n", q.front(), q.back()); //输出结果是1 5
return 0;
}
queue实用函数实例解析
(1) push()
//push(x)将x进行入队,时间复杂度为O(1),实例见"queue"容器内元素的访问。
(2) front(), back()
//front()和back()可以分别获得队首元素和队尾元素,时间复杂度为O(1),实例见"queue"容器内元素的访问。
//使用front()前,必须用empty()判断队列是否为空
(3) pop()
//pop()令队首元素出队,时间复杂度为O(1)
//使用pop()前,必须用empty()判断队列是否为空
#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(); //出队首元素三次(即依次出队1 2 3)
}
printf("%d\n", q.front()));
return 0;
}
(4) empty()
//empty()检测queue是否为空,返回true则空,返回false则非空。时间复杂度为O(1)
#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) { //在入队"1"后,队列非空
printf("Empty\n");
} else {
printf("Not Empty\n");
}
return 0;
}
(5) size()
//size()返回queue内元素的个数,时间复杂度为O(1)
#include <stdio.h>
#include <queue>
using namespace std;
int main() {
queue<int> q;
for(int i = 1; i <= 5; i++) {
q.push(i); //push(i)用以将i压入队列
}
printf("%d\n", q.size()); //队列中有5个元素
return 0;
}
4. queue的常见用途
需要实现广度优先搜索时,可以不用自己手动实现一个队列,而是用queue作为替代。
因上求缘,果上努力~~~~ 作者:图神经网络,转载请注明原文链接:https://www.cnblogs.com/BlairGrowing/p/12676821.html