using namespace std;
template<class T>
class Queue {
public:Queue(int size=0);
Queue(const Queue<T>& q);
virtual~Queue();
void In(T n);
const T Out();
bool Empty()const;
bool Full()const;
private:int max; T* Front, * Tail;
};
template<class T>
Queue<T>::Queue(int size)
{
Front=Tail = new T[(max = size)+1];
}
template<class T>
Queue<T>::Queue(const Queue<T>& q)
{
Front = new T[(max = q.max)+1];
Tail = Front + (int(q.Tail - q.Front));
for (int i = 0; i < int(Tail - Front); i++)
{
Front[i] = q.Front[i];
}
}
template<class T>
Queue<T>::~Queue()
{
delete[]Front;
}
template<class T>
const T Queue<T>::Out()
{
if (Tail == Front)
{
cout << "overflow" << endl;
return -1;
}
else
{
return *(Front++); //返回出队的该元素
}
}
template<class T>
void Queue<T>::In(T n)
{
if (int(Tail - Front) >= max)
cout << "overflow" << endl;
else *(Tail++) = n;
}
template<class T>
bool Queue<T>::Empty()const
{
return Front == Tail;
}
template<class T>
bool Queue<T>::Full()const
{
return int(Tail - Front) == max;
}
int main()
{
Queue<int>Queue1(10); Queue<double>Queue2(10);
for (int i = 2; i < 5; i++)
Queue1.In(i);
for (double i = 0; i < 8; i++)
Queue2.In(i);
cout << Queue1.Out(); //这里出现问题
}
在执行Out操作的时候,release能编译通过,但是debug就是显示
如果完美解决的话可以微信支付10y
你这个程序既然是指定大小的循环队列,那么头和尾指针应该和队列本身的动态分配地址分开,不然导致你出队后,队列指针变化,无法正确释放分配的空间。
#include <iostream>
using namespace std;
template<class T>
class Queue {
public:Queue(int size = 0);
Queue(const Queue<T>& q);
virtual~Queue();
void In(T n);
const T Out();
bool Empty()const;
bool Full()const;
private:int max; T* Front, *Tail, *Qdata;
};
template<class T>
Queue<T>::Queue(int size)
{
Qdata = new T[size];
Front = Tail = Qdata;
max = size;
}
template<class T>
Queue<T>::Queue(const Queue<T>& q)
{
Front = new T[(max = q.max) + 1];
Tail = Front + (int(q.Tail - q.Front));
for (int i = 0; i < int(Tail - Front); i++)
{
Front[i] = q.Front[i];
}
}
template<class T>
Queue<T>::~Queue()
{
delete[]Qdata;
}
template<class T>
const T Queue<T>::Out()
{
if (Tail == Front)
{
cout << "overflow" << endl;
return -1;
}
else
{
return *(Front++); //返回出队的该元素
}
}
template<class T>
void Queue<T>::In(T n)
{
if (int(Tail - Front) >= max)
cout << "overflow" << endl;
else *(Tail++) = n;
}
template<class T>
bool Queue<T>::Empty()const
{
return Front == Tail;
}
template<class T>
bool Queue<T>::Full()const
{
return int(Tail - Front) == max;
}
int main()
{
Queue<int>Queue1(10); Queue<double>Queue2(10);
for (int i = 2; i < 5; i++)
Queue1.In(i);
for (double i = 0; i < 8; i++)
Queue2.In(i);
cout << Queue1.Out(); //这里出现问题
}