“ Node <t *> * first”和“ Node <t> * first”有什么区别?

时间:2019-05-19 16:10:00

标签: c++ pointers templates

我正在考虑使用模板来实现链表。

就目前而言,在看了一些指南之后,我设法建立了一个可以正常运行的指南,但是我想知道模板指针的目的是什么?该代码似乎在任意使用它们。我将在下面的头代码中举例说明:

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;

    };

在这种特定情况下,为什么我们需要用声明节点变量或链表?就我而言,使用可以正常工作,但是我很可能会遗漏一些东西。 Node类(上面未列出)也是使用实现的,那么当您在其中添加该指针时实际上发生了什么?

非常感谢!

1 个答案:

答案 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;
};

让我们像intT *一样使用Node<T*>并实例化一个Node <int *>

struct Node
{
    int * data;
    Node * next;
    Node * previous;
};

注意到data成员的数据类型有何不同?

在一个示例中,dataint。在另一个示例中,data是指向 int指针。