В чем разница между «Узел <T *> * первый» и «Узел <T>* первый»? - PullRequest
4 голосов
/ 19 мая 2019

Я смотрю на реализацию связанного списка, используя шаблоны.

В настоящее время после просмотра некоторых руководств мне удалось создать работающее, но мне интересно, какова цель указателя шаблона? Код, кажется, использует их произвольно. Я приведу пример для моего кода заголовка ниже:

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 Ответ

1 голос
/ 19 мая 2019

Разница в содержании вашего 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...