template<typename T>
class Queue
{
public:
Queue(size_t capacity = 5)
:_front(0)
,_rear(0)
,_capacity(capacity+3)//加一个常数防止传参为0程序奔溃
,_count(0)
{
_pData = new T[_capacity];//开辟空间
}
void Push(const T& x)
{
if(_count != _capacity)//如果队列不满
{
_pData[_rear] = x;
_count++;//插入后队列中元素个数加一
_rear = (_rear+1)%_capacity;//因为是循环队列所以得模它的容量
}
}
void Pop()
{
if(!Empty())//队列不空
{
_count--;
_front = (_front+1)%_capacity;
}
}
T& Front()
{
return _pData[_front];
}
const T& Front()const
{
return _pData[_front];
}
T& Back()
{
return _pData[(_rear-1)%_capacity];//模容量防止_rear减完变成负数
}
const T& Back()const
{
return _pData[(_rear-1)%_capacity];
}
size_t Size()
{
return _count;
}
bool Empty()const
{
return 0 == _count;
}
private:
T* _pData;
size_t _front;
size_t _rear;
size_t _capacity;
size_t _count;
};
int main()
{
Queue<int> q;
q.Push(1);
q.Push(2);
q.Push(3);
q.Push(4);
cout<<q.Front()<<endl;
cout<<q.Back()<<endl;
q.Pop();
q.Pop();
cout<<q.Front()<<endl;
cout<<q.Size()<<endl;
cout<<q.Back()<<endl;
q.Pop();
q.Pop();
cout<<q.Empty()<<endl;
cout<<q.Size()<<endl;
system("pause");
return 0;
}
程序运行截图