Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 03.03.2021
Сообщений: 17
1

Шаблоны класса list

03.03.2021, 16:02. Показов 1889. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подскажите, есть код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include <iostream>
#include <clocale>
#include <iomanip>
#include <string>
using namespace std;
 
class List
{
    Node* Head;     // Адрес головного элемента списка
    Node* Tail;     // Адрес последнего элемента списка
    int Count;      // Количество элементов списка
public:
    // Конструктор
    List();
    // Деструктор
    ~List();
    void Add(char data);    // Добавление элемента в список (Новый элемент становится последним)
    void Del();             // Удаление элемента списка
    void DelAll();          // Удаление всего списка
    void Print();           // Распечатка содержимого списка  
    int GetCount();         // Получение количества элементов, находящихся в списке
};
 
struct Node
    {
        char value; // Данные
        Node* Next; // Адрес следующего элемента списка
    };
 
List::List()
{
    Head = Tail = NULL;             // Изначально список пуст
    Count = 0;
}
List::~List()
{
    DelAll();                        // Вызов функции удаления
}
void List::Add(char data)
{
    Node* temp = new Node;          // создание нового элемента
    temp->value = data;             // заполнение данными
    temp->Next = NULL;              // следующий элемент отсутствует
    if (Head != NULL) {             // новый элемент становится последним элементом списка если он не первый добавленный
        Tail->Next = temp;
        Tail = temp;
    }
    else {
        Head = Tail = temp;         // новый элемент становится единственным если он первый добавленный
    }
}
void List::Del()
{
    Node* temp = Head;             // запоминаем адрес головного элемента
    Head = Head->Next;             // перебрасываем голову на следующий элемент
    delete temp;                   // удаляем бывший головной элемент
}
void List::DelAll()
{
    while (Head != 0)             // Пока еще есть элементы
        Del();                    // Удаляем элементы по одному
}
void List::Print()
{
    Node* temp = Head;                    // запоминаем адрес головного элемента
    while (temp != 0)                     // Пока еще есть элементы
    {
        cout << temp->value << " ";       // Выводим данные
        temp = temp->Next;                // Переходим на следующий элемент
    }
    cout << "\n\n";
}
 
void main()
{
   
    List lst;                       // Создаем объект класса List
    char s[] = "123456789\n";       // Тестовая строка
    cout << s << "\n\n";            // Выводим строку
    int len = strlen(s);            // Определяем длину строки
    for (int i = 0; i < len; i++)   // Загоняем строку в список
        lst.Add(s[i]);
    lst.Print();                    // Распечатываем содержимое списка
    lst.Del();                      // Удаляем один элемента списка
    lst.Print();                    // Распечатываем содержимое списка
    lst.~List();                    // Деструктор удаляет список
}
Нужно, как я понял, сделать так, чтобы класс работал с данными различных типов (int, float, char) в виде шаблона. Через Template <typename T> ....
Не совсем понимаю как и куда его вставить. Подскажите?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.03.2021, 16:02
Ответы с готовыми решениями:

Шаблоны, vector, list
Создать класс Beta таким образом , чтобы при уничтожении последнего объекта на экран выдавалось...

Шаблоны классов, list (STL)
Здравствуйте, столкнулся с проблемой, что при повторном выполнении цикла генерируется исключение...

Шаблоны: ошибки: requires template argument list или undeclared identifier
Есть маленький тестовый проект из 4-файлов. Что мне надо - рассказывать словами замучаюсь,...

Шаблоны класса
Здравствуйте! Не могли бы вы помочь сделать 10й пункт меню, там должен выполняться шаблон(198-216...

4
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,884
Записей в блоге: 1
03.03.2021, 16:18 2
Цитата Сообщение от Strix1st Посмотреть сообщение
Не совсем понимаю как и куда его вставить. Подскажите?
объявляешь тип так:
C++
1
2
3
4
5
6
7
8
template <typename T>
class List
{
    ...
    T Count;
    // Дальше везде конкретный тип char заменяешь на обобщённый T
    
}
0
Модератор
Эксперт С++
 Аватар для zss
13727 / 10923 / 6480
Регистрация: 18.12.2011
Сообщений: 29,157
03.03.2021, 16:20 3
Лучший ответ Сообщение было отмечено Strix1st как решение

Решение

_stanislav, Вы немного промазали.
Count надо оставить целочисленной,
а вот Node должна быть такой
C++
1
2
3
4
5
6
template <typename T>
    struct Node
    {
        T value; // Данные
        Node<T>* Next; // Адрес следующего элемента списка
    };
Соответственно
C++
1
2
3
4
5
template <typename T>
class List
{
    Node<T>* Head;     // Адрес головного элемента списка
    Node<T>* Tail;     // Адрес последнего элемента списка
В целом получится так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#include <iostream>
#include <clocale>
#include <iomanip>
#include <string>
using namespace std;
 
template <typename T>
struct Node
{
    T value; // Данные
    Node<T>* Next; // Адрес следующего элемента списка
}; 
template <typename T>
class List
{
    Node<T>* Head;     // Адрес головного элемента списка
    Node<T>* Tail;     // Адрес последнего элемента списка
    int Count;      // Количество элементов списка
public:
    // Конструктор
    List();
    // Деструктор
    ~List();
    void Add(char data);    // Добавление элемента в список (Новый элемент становится последним)
    void Del();             // Удаление элемента списка
    void DelAll();          // Удаление всего списка
    void Print();           // Распечатка содержимого списка  
    int GetCount();         // Получение количества элементов, находящихся в списке
};
 
 
template <typename T>
List<T>::List()
{
    Head = Tail = NULL;             // Изначально список пуст
    Count = 0;
}
template <typename T>
List<T>::~List()
{
    DelAll();                        // Вызов функции удаления
}
template <typename T>
void List<T>::Add(char data)
{
    Node<T>* temp = new Node<T>();          // создание нового элемента
    temp->value = data;             // заполнение данными
    temp->Next = NULL;              // следующий элемент отсутствует
    if (Head != NULL) {             // новый элемент становится последним элементом списка если он не первый добавленный
        Tail->Next = temp;
        Tail = temp;
    }
    else {
        Head = Tail = temp;         // новый элемент становится единственным если он первый добавленный
    }
}
template <typename T>
void List<T>::Del()
{
    Node<T>* temp = Head;             // запоминаем адрес головного элемента
    Head = Head->Next;             // перебрасываем голову на следующий элемент
    delete temp;                   // удаляем бывший головной элемент
}
template <typename T>
void List<T>::DelAll()
{
    while (Head != 0)             // Пока еще есть элементы
        Del();                    // Удаляем элементы по одному
}
template <typename T>
void List<T>::Print()
{
    Node<T>* temp = Head;                    // запоминаем адрес головного элемента
    while (temp != 0)                     // Пока еще есть элементы
    {
        cout << temp->value << " ";       // Выводим данные
        temp = temp->Next;                // Переходим на следующий элемент
    }
    cout << "\n\n";
}
 
void main()
{
 
    List<char> lst;                       // Создаем объект класса List
    char s[] = "123456789\n";       // Тестовая строка
    cout << s << "\n\n";            // Выводим строку
    int len = strlen(s);            // Определяем длину строки
    for (int i = 0; i < len; i++)   // Загоняем строку в список
        lst.Add(s[i]);
    lst.Print();                    // Распечатываем содержимое списка
    lst.Del();                      // Удаляем один элемента списка
    lst.Print();                    // Распечатываем содержимое списка
    //lst.~List(); // Деструктор нельзя вызывать явно !!!!
}
1
0 / 0 / 0
Регистрация: 03.03.2021
Сообщений: 17
04.03.2021, 12:04  [ТС] 4
А можешь помочь с функцией добавления элемента в указанное место, а не только в шапку?
Всю голову сломал...
0
Модератор
Эксперт С++
 Аватар для zss
13727 / 10923 / 6480
Регистрация: 18.12.2011
Сообщений: 29,157
04.03.2021, 12:12 5
Цитата Сообщение от Strix1st Посмотреть сообщение
помочь с функцией добавления элемента в указанное место
 Комментарий модератора 
П.5.16.Правил
Запрещено создавать темы с множеством вопросов во всех разделах, кроме разделов платных услуг. Один вопрос - одна тема.
0
04.03.2021, 12:12
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.03.2021, 12:12
Помогаю со студенческими работами здесь

Шаблоны класса, очередь
Есть задание: Определите шаблон QueueTp. Проверьте его, создав очередь указателей на Worker. Вот...

Шаблоны методов класса
Здравствуйте, подскажите, можно ли в С++ сделать шаблон отдельного метода класса ? т.е. нужно...

Не разбиваются шаблоны класса на файлы
Всем привет. Изучаю С++, всегда разбивал свои программы на файлы и радовался, но тут начал изучать...

Шаблоны массива класса array (объяснить)
Здравствуйте, я не могу понять, что означает шаблон класса array..Вот само задание: &quot;13. Объявите...

Шаблоны классов, перегрузка operator<< класса ostream
Не компилируется программа. fatal error: 1 unresolved externals Как правильно определить...

Шаблоны классов: непонятная ошибка в одном из методов класса
Задача создать шаблон двоичного дерева поиска. В методе удаления узла IntelliSense выдает ошибку:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
[Golang] 121. Best Time to Buy and Sell Stock
alhaos 28.01.2025
В этой задаче мы получаем слайс целых чисел, которые означают цену акции в разные моменты времени, и должны вернуть максимально возможную прибыль от купли продажи акции. / / . . .
Проектирование и моделирование
hw_wired 28.01.2025
Введение в моделирование Моделирование представляет собой один из фундаментальных методов научного познания, который позволяет изучать объекты и явления через создание их упрощенных аналогов. В. . .
Алгоритмы и исполнители
hw_wired 28.01.2025
Введение в алгоритмы В современном мире информационных технологий алгоритмы играют основополагающую роль в решении различных задач и автоматизации процессов. Алгоритм представляет собой точную. . .
Хранение информации
hw_wired 28.01.2025
Введение: Роль систем хранения информации в современном мире В современную эпоху цифровых технологий эффективное хранение информации становится одним из ключевых факторов успешного развития любой. . .
Обработка числовой информации
hw_wired 28.01.2025
Введение в обработку числовой информации В современном мире обработка числовой информации стала неотъемлемой частью как профессиональной деятельности, так и повседневной жизни. Электронные таблицы. . .
Мультимедиа
hw_wired 28.01.2025
Введение в мультимедийные технологии В современном мире мультимедийные технологии стали неотъемлемой частью нашей жизни, проникнув во все сферы человеческой деятельности. Термин "мультимедиа". . .
Обработка текстовой информации
hw_wired 28.01.2025
Введение в обработку текстовой информации В современном мире обработка текстовой информации играет фундаментальную роль в различных сферах человеческой деятельности. Текстовые редакторы стали. . .
Обработка графической информации
hw_wired 28.01.2025
Введение в компьютерную графику Компьютерная графика стала неотъемлемой частью современного цифрового мира, пройдя впечатляющий путь развития от простейших черно-белых изображений до сложных. . .
Python в Алгоритмике: Решение задач
hw_wired 28.01.2025
Введение в Python и Алгоритмику В современном мире программирование стало неотъемлемой частью образования и профессионального развития. Python зарекомендовал себя как один из самых популярных и. . .
Компьютер как универсальное устройство для работы с информацией
hw_wired 28.01.2025
Введение в устройство компьютера Компьютер представляет собой универсальное электронное устройство, предназначенное для автоматической обработки информации. В современном мире компьютер стал. . .
Информация и информационные процессы
hw_wired 28.01.2025
Понятие информации и ее виды В современном мире информация является одним из фундаментальных понятий, пронизывающих все сферы человеческой деятельности. Под информацией понимают любые сведения об. . .
Алгоритмика
hw_wired 28.01.2025
Введение: Основы алгоритмики и её роль в информатике В современном мире программирование и алгоритмическое мышление стали неотъемлемой частью образования и профессиональной деятельности. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru