队列的基本操作有size(), empty(),push(),front(),pop();
#include<iostream>
#include<queue>
using namespace std;
int main()
{
int arr[]={5,7,9,4,6,8,3,2,1},i;
int arrsize=sizeof(arr)/sizeof(int);
queue<int > arrQueue;
cout<<"Before enter queue: "<<endl;
cout<<"Queue.size():"<<arrQueue.size()<<endl;
for(i=0;i<arrsize;i++)
{
cout<<arr[i]<<" "; //入队列
arrQueue.push(arr[i]);
}
cout<<endl;
cout<<"Final: "<<endl;
cout<<"Queue.size(): "<<arrQueue.size()<<endl;
while(!arrQueue.empty()) //出队列
{
cout<<arrQueue.front()<<" ";
arrQueue.pop();
}
cout<<endl;
arrQueue.push(10);//当全部元素出队列后,队列为空,再继续入队
arrQueue.push(99);
cout<<"insert new:"<<endl;
cout<<"Queue.size():"<<arrQueue.size()<<endl;
cout<<"Front of Queue:"<<arrQueue.front ()<<endl; //返回队首元素
while(!arrQueue.empty())
{
cout<<arrQueue.front()<<" ";
arrQueue.pop();
}
return 0;
}
下面在用一个例子来说明如何通过表或双端队列保存队列元素来声明STL队列。队列qList使用表容器,qDeque使用双端队列容器。在循环中,程序提示用户输入大于等于0的整数,当输入0后,循环结束。然后,程序把偶数都加到qLIst中,把奇数都加到qDeque中。最后,显示并删除队列里的元素。
注意:
用表还是双端队列?list类在加入数据项时,每个数据项都是独立的元素,当pop()方法删除元素时,list类将释放被删除元素占用的内存,在以后加入操作时,可以再次分配内存。相反的,双端队列按块分配内存,在加入和删除数据时进行的操作和向量类似。一般来说,用双端队列实现的队列要快一些。
#include<iostream>
#include<deque>
#include<queue>
#include<list>
using namespace std;
int main()
{
queue<int,list<int> > qList; //使用表容器
queue<int,deque<int> > qDeque;//使用双端队列容器
int value;
cout<<"Enter an integer >0 or 0 to quit: ";
cin>>value;
while(value!=0)
{
if(value%2==0) //如果偶奇数,则加到qList中
qList.push(value);
else //如果是奇数,则加到qDeque中
qDeque.push(value);
cout<<"Enter an integer >0 or 0 to quit:";
cin>>value;
}
cout<<endl<<"Even numbers: ";
while(!qList.empty())
{
cout<<qList.front()<<" ";
qList.pop();
}
cout<<endl<<endl;
cout<<"odd numbers: ";
while(!qDeque.empty())
{
cout<<qDeque.front()<<" ";
qDeque.pop();
}
cout<<endl;
return 0;
}