我正在考虑使用模板来实现链表。
就目前而言,在看了一些指南之后,我设法建立了一个可以正常运行的指南,但是我想知道模板指针的目的是什么?该代码似乎在任意使用它们。我将在下面的头代码中举例说明:
template <class T>
class LinkedList{};
template <class T>
class LinkedList<T*>{
private:
Node<T*> *first;
int size;
public:
class Iterator{
public:
Iterator(Node<T*> *newElem){
elem = newElem;
}
virtual ~Iterator(){
}
T getValue(){
return *(elem->getValue());
}
void next(){
elem = elem->getNext();
}
void operator++(int i){
next();
}
void operator++(){
next();
}
T operator*(){
return getValue();
}
bool operator==(const Iterator& rhs){
return (elem == rhs.elem);
}
bool operator!=(const Iterator& rhs){
return (elem != rhs.elem);
}
bool hasNext(){
if (elem == NULL)
return false;
return true;
}
private:
Node<T*> *elem;
};
在这种特定情况下,为什么我们需要用
非常感谢!
答案 0 :(得分:1)
区别在于您的Node
的内容。
让我们定义Node
类:
template <class T>
struct Node
{
T data;
Node * next;
Node * previous;
};
让我们使用int
作为类型T
并实例化:
struct Node
{
int data;
Node * next;
Node * previous;
};
让我们像int
或T *
一样使用Node<T*>
并实例化一个Node <int *>
:
struct Node
{
int * data;
Node * next;
Node * previous;
};
注意到data
成员的数据类型有何不同?
在一个示例中,data
是int
。在另一个示例中,data
是指向 int
的指针。