使用CodeBlocks 17.12版本,win10系统。
下面main函数中的while循环内部的两个Q.display()输出的内容不同,期间只是cin了一个数,不知道是什么原因。(Q.display()输出的是theQueue的前size个数值)
还有enqueue函数中的sequence的值也会莫名其妙的改变,不懂。。
求教~
#include <iostream>
using namespace std;
class Queue
{
public:
Queue(int theSize);
bool enqueue(int number);
int dequeue();
int peek(int number) const;
int getSize() const;
void display() const;
private:
int size;
int theQueue[];
int sequence;//记录当前入列的元素位置。
};
int main()
{
int sizeValue,theNumber;
cout<<"Enter the queue's size(less than 11): \n";
cin>>sizeValue;
Queue Q(sizeValue);
while (true)
{
Q.display();
cout<<"Please input a number to fill up the queue: \n";
cin>>theNumber;
Q.display();
if (Q.enqueue(theNumber)==false)
break;
}
cout<<"Now the queue have "<<Q.getSize()<<" elements,they are:\n";
Q.display();
cout<<"The first element in the queue is: "<<Q.dequeue()<<endl;
cout<<"Now the queue have "<<Q.getSize()<<" elements,they are:\n";
Q.display();
return 0;
}
Queue::Queue(int theSize)
{
int aQueue[10]={0,0,0,0,0,0,0,0,0,0};
for (int i=0;i<10;i++)
theQueue[i]=aQueue[i];
size=theSize;
sequence=0;//初始入列元素的位置为0。
}
bool Queue::enqueue(int number)
{
theQueue[sequence]=number;
sequence=sequence+1;//入列元素位置后移一位。
if (sequence>=size)
{
cout<<"The queue is full!\n";
return false;
}
else
return true;
}
int Queue::dequeue()
{
int firstNumber;
firstNumber=theQueue[0];
for (int i= 1;i<size;i++)
theQueue[i-1]=theQueue[i];
size=size-1;
return firstNumber;
}
int Queue::peek(int number) const
{
return theQueue[number];
}
int Queue::getSize() const
{
return size;
}
void Queue::display() const
{
for (int j=0;j<size;j++)
cout<<theQueue[j]<<" ";
cout<<endl;
}