2016-09-01 15 views
-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; 
} 
+2

その行は、出力変数にフロント要素の値を割り当てます。それがなければ、永遠にポップして要素を失います。 – imreal

答えて

2

dequeue()方法は、キューから前方ノードを削除:

は、ここでは、コードの重要な部分です。対象の行は、キューからノードを削除する前に、フロントノードのフィールドをitem出力変数(参照渡し)に割り当てます。