我正在使用 eclipse 编写一个队列,一个名为 getFirst 的函数定义为:
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;
};