CodeBlocks 17.12, win10
Второй элемент массива "theQueue" показывает разные до и после строки "cin >> theNumber;" в основной функции.
Я нашел проблему, добавив "Q.display ();" до и после распечатывать элементы массива "theQueue".
Кроме того, в функции «bool Queue :: enqueue (int number)» переменная «последовательность» также изменилась ненормально.
#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;//record the current position
};
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;//the initial position is 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;
}