queue
是 C++ 标准模板库(STL)中的容器适配器,用于实现先进先出(FIFO)的队列数据结构。队列中的元素按照插入的顺序进行排列,并且只能在队列的一端(称为队尾)添加元素,在另一端(称为队首)删除元素。
特点:
-
先进先出(FIFO):队列中的元素按照插入的顺序进行排列,最先插入的元素最先被删除。
-
只能在两端操作:只能在队列的一端(队尾)添加元素,在另一端(队首)删除元素,即不能在队列的中间位置插入或删除元素。
-
动态操作:可以动态地向队列中添加元素,并且可以删除队列中的元素,队列会自动调整元素的位置。
- queue的定义
queue<typename> name;
- queue容器内元素的访问
由于队列本身就是一种先进先出的限制性数据结构,因此在STL中只能通过front()来访问队首元素,或是通过back()来访问队尾元素。
示例:
#include <iostream>
#include <queue>
using namespace std;
queue<int> q;
int main()
{
for(int i=0;i<5;i++){
q.push(i+1); //push将i+1压入队列
}
cout<<q.front()<<" "<<q.back();
return 0;
}
输出结果:
1 5
- queue常用函数
(1)push()
push(x)将x进入队列,时间复杂度为O(1)。
(2)front()、back()
front()和back()可以分别获得队首元素和队尾元素,时间复杂度为O(1)。
(3)pop()
pop()令队首元素出队,时间复杂度为O(1)。
示例:
#include <iostream>
#include <queue>
using namespace std;
queue<int> q;
int main()
{
for(int i=0;i<5;i++){
q.push(i+1); //push将i+1压入队列
}
for(int i=0;i<2;i++){
q.pop(); //出队2次(1,2出队)
}
cout<<q.front();
return 0;
}
输出结果:
3
(4)empty()
empty()检测queue是否为空,返回true为空,返回false为非空。时间复杂度为O(1)。
示例:
#include <iostream>
#include <queue>
using namespace std;
queue<int> q;
int main()
{
if(q.empty()==true){ //初始时,队列为空
cout<<"empty"<<endl;
}
else{
cout<<"not empty"<<endl;
}
q.push(1); //在入队1后,队列非空
if(q.empty()==true){
cout<<"empty"<<endl;
}
else{
cout<<"not empty"<<endl;
}
return 0;
}
输出结果:
empty
not empty
(5)size()
size()返回queue内元素的个数,时间复杂度为O(1)。
示例:
#include <iostream>
#include <queue>
using namespace std;
queue<int> q;
int main()
{
for(int i=0;i<5;i++){
q.push(i+1); //push将i+1压入队列
}
cout<<q.size();
return 0;
}
输出结果:
5