-2
私は本からC++を学んでおり、わからない1行のコードがあります。プログラムは、ATMの前にいる人のキューをシミュレートする必要があります。私はこの1行を理解していません:C++コードの説明?
item = front->item; // Is it necessary and what does it do ?
最後はbool Queue::dequeue(Item & item)
です。ポインタで何かする必要がありますが、この行を削除するとプログラムはうまく動作します。
class Customer
{
private:
long arrive;
int processtime;
public:
Customer() { arrive = processtime = 0; }
void set(long when);
long when() const { return arrive; }
int ptime() const { return processtime; }
};
typedef Customer Item;
class Queue
{
private:
struct Node { Item item; struct Node * next; };
enum { Q_SIZE = 10 };
Node * front;
Node * rear;
int items;
const int qsize;
Queue(const Queue & q) : qsize(0) { }
Queue & operator=(const Queue & q) { return *this; }
public:
Queue(int qs = Q_SIZE);
~Queue();
bool isempty() const;
bool isfull() const;
int queuecount() const;
bool enqueue(const Item &item);
bool dequeue(Item &item);
};
Queue::Queue(int qs) : qsize(qs)
{
front = rear = NULL;
items = 0;
}
Queue::~Queue()
{
Node * temp;
while (front != NULL)
{
temp = front;
front = front->next;
delete temp;
}
}
bool Queue::enqueue(const Item & item)
{
if (isfull())
return false;
Node * add = new Node;
if (add == NULL)
return false;
add->item = item;
add->next = NULL;
items++;
if (front == NULL)
front = add;
else
rear->next = add;
rear = add;
return true;
}
bool Queue::dequeue(Item & item)
{
if (front == NULL)
return false;
item = front->item; // Is it necessary and what does it do ?
items--;
Node * temp = front;
front = front->next;
delete temp;
if (items == 0)
rear = NULL;
return true;
}
その行は、出力変数にフロント要素の値を割り当てます。それがなければ、永遠にポップして要素を失います。 – imreal