私はEclipseを使用してキューをコーディングしていました.getFirstと呼ばれる1つの関数は次のように定義されています:
template<class T>
T getFirst(){
return head->data;
}
主に、キュー Q を宣言した後、次のような有効なデータを入力します。
Queue<int> Q;
Q.add(2);
cout << Q.getFirst() << endl;
出力は 2 です。これはまさに私が望んでいたものです。
しかし!!!コードを次のように変更すると:
Queue<int> Q;
Q.add(2);
cout << Q.getFirst() << endl;
cout << Q.getFirst() << endl;
出力は次のとおりです。
2
2
しかし、次のようなもの:
2
2657382
いくつか考えた後、コードを次のように変更しました。
Queue<int> Q;
Q.add(2);
cout << Q.getFirst();
cout << Q.getFirst() << endl;
今回はうまくいきました!! 大丈夫です!出力は 22 です。これは理にかなっています。
ここで問題を親切に説明してくれる人はいますか?
Node と Queue の定義は一般的で一般的です。
template<typename T>
class Node{
public:
Node(T data, Node* left = 0, Node* right = 0): _data(data), _left(left), _right(right){
if(left)
left->_right = this;
if(right)
right->_left = this;
}
Node(): _right(0){}
private:
T _data;
Node<T>* _left;
Node<T>* _right;
friend class Queque<T>;
};
template<typename T>
class Queque{
public:
Queque(): _first(new Node<T>), _size(0){
_first->_right = _first;
_first->_left = _first;
}
void addFirst(T item){
Node<T>(item, _first, _first->_right);
_size++;
}
T examineFirst(){
return _first->_right->_data;
}
private:
Node<T>* const _first;
int _size;
};