1)首先我们还是看一下STL关于queue的使用方法
#include"stdafx.h"
#include<iostream>
#include<queue>
#include<algorithm>
usingnamespacestd;
int_tmain(intargc,_TCHAR*argv[])
{
deque<int>iQue(20,0); //定义了个元素初值为
cout<<"size= "<<iQue.size()<<endl;
for(inti=0;i<20;i++)
iQue[i]= i+1; //重载了[]
for(inti=0;i<20;i++)
cout<<iQue.at(i)<<" "; //获取i位置的元素
cout<<endl;
for(inti=0;i<3;i++)
iQue.push_back(i+90); //在后面添加数据
for(inti=0;i<iQue.size();i++) //进行输出
cout<<iQue[i]<<"";
cout<<endl;
for(inti=0;i<5;i++)
iQue.pop_back(); //进行数据的弹出
for(inti=0;i<iQue.size();i++)
cout<<iQue[i]<<"";
cout<<endl;
iQue.push_front(1000); //在队列的首部添加数据
deque<int>::iteratorit;
for(it=iQue.begin();it!=iQue.end();++it) //使用泛型指针进行迭代
cout<<*it<<"";
cout<<endl;
getchar();
return0;
}
2)看看queue的源码,的确实现的难度比较大(泛型指针包括四个域,使用了map等方法),呵呵,我们简单的写我们自己的queue,也实现一些基本功能。
#include"stdafx.h"
#include<iostream>
usingnamespacestd;
template<classT>
classQueue
{
public:
conststaticsize_tmaxQueueSize= 40; //定义最大的容量
typedefT*iterator; //不适用泛型了
typedefT&ref_iterator;
typedefconstT*const_iterator;
typedefconstT&const_ref_iterator;
private:
intfront,rear; //定义头指针和尾指针
intmaxSize;
T*arr;
public:
Queue(size_tsize):front(0),rear(0)
{
maxSize= size>maxQueueSize?maxQueueSize:size;
arr= newT[maxSize];
}
Queue():maxSize(maxQueueSize),front(0),rear(0){};
~Queue(){if(arr) delete[]arr;};
boolIsEmpty()const{return(front==rear);};
boolIsFull()const{return((rear+1)%maxSize== front);}; //使用循环队列
voidsetEmpty(){front=rear=0;}; //进行指针的重定向
const_ref_iteratorgetFont()const
{
if(IsEmpty())
returnNULL;
returnarr[front];
}
const_ref_iteratorgetRear()const
{
if(IsEmpty())
throwout_of_range("范围错误!");
returnarr[rear];
}
voidpush_back(constT&val)
{
if(IsFull())
extendQueue(2*maxSize);
arr[rear]= val;
rear++;
}
voidpop_back()
{
if(front+1== maxSize)front=0;
}
iteratorbegin()
{
return&arr[front];
}
iteratorend()
{
return&arr[rear];
}
voidextendQueue(size_tnewSize)
{
T*oldArr= arr;
arr= newT[newSize];
inti=0;
for(; i<maxSize;i++)arr[i]= oldArr[i];
front=0;
rear= i;
maxSize= newSize;
delete[]oldArr;
}
constQueue&operator=(constQueue&src);
size_tsize()
{
return(rear-front);
}
};
template<classT>
constQueue<T>&Queue<T>::operator=(constQueue&src)
{
if(this==&src) return*this;
delete[]arr;
maxSize= src.maxSize;
arr= newT[maxSize];
for(size_ti=0;i<maxSize;i++) arr[i]= src.arr[i];
front= 0;
rear= i;
return*this;
}
int_tmain(intargc,_TCHAR*argv[])//进行简单测试
{
Queue<int>iQue(10);
iQue.push_back(3);
iQue.push_back(4);
iQue.push_back(5);
iQue.push_back(6);
iQue.push_back(7);
iQue.push_back(8);
intval= iQue.getFont();
cout<<val<<endl;
for(Queue<int>::iteratorit=iQue.begin();it!=iQue.end();it++) //由于使用底层普通指针可以使用++
cout<<*it<<" ";
cout<<endl;
getchar();
return0;
}