Как описать деструктор?

99
15 декабря 2020, 17:40

Есть класс List и класс Node. Как я не пытался описать деструкторы, методы del_first и del_last работают некорректно. Как конкретно мне нужно описать деструкторы для каждого из классов, для того, чтобы деструктор Node удалял один объект Node, а класс List - весь список, который из объектов класса Node и состоит? Код:

 #include "pch.h"
#include <iostream>
#include <string>
using namespace std;


template <class T>
class List
{
private:
    template <class T>
    class Node
    {
    public:
        T data;
        Node<T> *next;
        Node(T dat) : data(dat), next(NULL) {}
        ~Node() { }
    };
    int size;
    Node<T> *head, *tail;
public:
    List(): size(0), head(NULL), tail(NULL) {}
    ~List() 
    {
        while (head)
        {
            tail = head->next;
            delete head;
            head = tail;
            this->size--;
        }
    }
    void show_list()
    {
        Node<T> *temp = head;
        while (temp != NULL)
        {
            cout << temp->data << " ";
            temp = temp->next;
            cout << endl;
        }
        cout << endl;
    }
    void add_to_head(T x)
    {
        Node<T> *temp = new Node<T>(x);
        temp->next = head;
        temp->data = x;
        if (head != NULL)
        {
            head = temp;
        }
        else
        {
            head = tail = temp;
        }
        this->size++;
    }
    void add_to_tail(T x)
    {
        Node<T> *temp = new Node<T>(x);
        temp->next = NULL;
        temp->data = x;
        if (head != NULL)
        {
            tail->next = temp;
            tail = temp;
        }
        else
        {
            head = tail = temp;
        }
        this->size++;
    }
    void del_first()
    {
        if (head == NULL) return;
        if (head->next) 
        {                                                   
            Node<T> *temp = head->next;
            delete head;
            head = temp;            
            this->size--;                                    
            return;                                       
        }
        else if (head == tail) 
        {                                                   
            head->next = NULL;                              
            delete head;
            delete tail;
            this->size = 0;                                     
            return;                                     
        }
    }
    void del_last()
    {
        if (head == NULL) return;
        Node<T> *temp = head;
        while (temp->next->next) temp = temp->next;
        delete tail;
        tail = temp;
        return;
    }
};
int main()
{
    system("color f0");
    List<string> mylist;
    int kil = 0;
    string mystring;
    cout << "Enter list size" << endl;
    cin >> kil;
    getchar();
    for (int i = 0; i < kil; i++)
    {
        cout << "Enter new element" << endl;
        getline(cin, mystring);
        mylist.add_to_tail(mystring);
    }
    cout << endl;
    mylist.del_first();
    mylist.del_last();
    mylist.show_list();
    system("PAUSE");
}
READ ALSO
Выровнять блок по центру контейнера

Выровнять блок по центру контейнера

Товарищи подскажите, как выровнять блок меню по центру который большей ширины контейнера в котором он лежит

135
Присвоить ID placeholder&#39;y

Присвоить ID placeholder'y

Можно ли как-то присвоить id плейсхолдеру? Нужно чтобы он динамически изменялся, в зависимости от выбранной валютыСейчас выглядит так:

125
Переход на якорь(#) через &lt;div onClick()&gt;

Переход на якорь(#) через <div onClick()>

Я пытаюсь перейти на блок, по клику мыши на другом блоке

97
Несколько элементарных вопросов по HTML

Несколько элементарных вопросов по HTML

Делаю отчёт в чистом html и у меня возникли небольшие трудности

111