概述
C++ STL 学习| queue
queue
queue的定义
queue翻译为队列,在STL中主要实现一个先进先出的容器,使用queue需要添加头文件#include<queue>
,并加上一句using namespace std;
此外,queue可用来以邻接表的方式储存图。
单独定义一个queue
queue<typename> name;
与之前的容器相同,typename可为任何基本类型,如int、double、char、结构体等,也可以是STL标准容器,如vector,set、queue等。
queue<int> name;
queue<double> name;
queue<char> name;
queue<node> name;
queue<queue<int> > name;
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);
}
printf("%d %d", q.front(), q.back());
return 0;
}
queue常用函数实例解析
(1)push()
push(x)将x进行入队,时间复杂度为O(1)
#include<stdio.h>
#include<vector>
using namespace std;
int main() {
queue<int> q;
for(int i = 1; i <= 3; i++) {
q.push(i);
}
for(int i = 0; i < q.size(); i++) {
printf("%d ", q[i]);
}
return 0;
}
(2)front()、back()
front()和back()可以分别获得队首元素和队尾元素,时间复杂度为O(1)
(3)pop()
pop()令队首元素出队,时间复杂度为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);
}
for(int i = 1; i <= 3; i++) {
q.pop();
}
printf("%d", 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) 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);
}
printf("%d", q.size());
return 0;
}
**总结:**当需要实现广度优先搜索时,可以不用自己手动实现队列,而是用queue作为代替,以提高程序的准确性。且在使用front()和pop()函数前,必须使用empty()函数判断队列是否为空,否则可能因为队空而出现错误。
**延伸:**STL的容器中还有两种容器跟队列有关,分别是双端队列(deque)和优先队列(priority_queue),前者是首尾皆可插入和删除的队列,后者是使用堆实现的默认将当前队列最大元素置于队首的容器。
最后
以上就是妩媚飞机为你收集整理的C++ STL 学习| queueC++ STL 学习| queue的全部内容,希望文章能够帮你解决C++ STL 学习| queueC++ STL 学习| queue所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复