C++标准模板库(STL)——queue常见用法详解
- queue的定义
queue<typename> name;
- queue容器内元素的访问
由于队列本身就是一种先进先出的限制性数据结构,因此在STL中只能通过front()来访问队首元素,或是通过back()来访问队尾元素。
示例:
1 #include <iostream> 2 #include <queue> 3 using namespace std; 4 queue<int> q; 5 int main() 6 { 7 for(int i=0;i<5;i++){ 8 q.push(i+1); //push将i+1压入队列 9 } 10 cout<<q.front()<<" "<<q.back(); 11 return 0; 12 }
输出结果: 1 5
- queue常用函数
(1)push()
push(x)将x进入队列,时间复杂度为O(1)。
(2)front()、back()
front()和back()可以分别获得队首元素和队尾元素,时间复杂度为O(1)。
(3)pop()
pop()令队首元素出队,时间复杂度为O(1)。
示例:
1 #include <iostream> 2 #include <queue> 3 using namespace std; 4 queue<int> q; 5 int main() 6 { 7 for(int i=0;i<5;i++){ 8 q.push(i+1); //push将i+1压入队列 9 } 10 for(int i=0;i<2;i++){ 11 q.pop(); //出队2次(1,2出队) 12 } 13 cout<<q.front(); 14 return 0; 15 }
输出结果: 3
(4)empty()
empty()检测queue是否为空,返回true为空,返回false为非空。时间复杂度为O(1)。
示例:
1 #include <iostream> 2 #include <queue> 3 using namespace std; 4 queue<int> q; 5 int main() 6 { 7 if(q.empty()==true){ //初始时,队列为空 8 cout<<"empty"<<endl; 9 } 10 else{ 11 cout<<"not empty"<<endl; 12 } 13 q.push(1); //在入队1后,队列非空 14 if(q.empty()==true){ 15 cout<<"empty"<<endl; 16 } 17 else{ 18 cout<<"not empty"<<endl; 19 } 20 return 0; 21 }
输出结果:
empty
not empty
(5)size()
size()返回queue内元素的个数,时间复杂度为O(1)。
示例:
1 #include <iostream> 2 #include <queue> 3 using namespace std; 4 queue<int> q; 5 int main() 6 { 7 for(int i=0;i<5;i++){ 8 q.push(i+1); //push将i+1压入队列 9 } 10 cout<<q.size(); 11 return 0; 12 }
输出结果: 5