Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 23.10.2020
Сообщений: 19

Запрограммировать класс "Однонаправленный список". Код к заданию имеется

22.06.2022, 14:02. Показов 1030. Ответов 16

Студворк — интернет-сервис помощи студентам
Запрограммировать класс "Однонаправленный список".
Предусмотреть "защиту от дурака" на введение размера списка, ограниченного, например, значением 100.

Запрограммировать операции доступ по индексу, добавление элемента, удаление элемента из начала, удаление элемента из конца.
Предусмотреть генерацию исключительных ситуаций:
1) попытка создать список больше максимального размера;
2) попытка обратиться к элементу с номером меньше 0 или больше текущего размера списка;
3) попытка добавить элемент с номером больше максимального размера;
4) попытка удалить элемент из пустого списка.
Проверьте пожалуйста код на правильность
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#include <iostream>
#include <conio.h>
#include <vector>
#include <ctime>
#include <math.h>
using namespace std;
 
class List {
    int n;
    vector <char> list;
 
    void create(vector <char> &head, int &k) {
        srand(time(0));
        cout << "Enter array size: ";
        cin >> k;
        if (k >= 0 && k <= 100) {
            cout << "Array created" << endl;
            for (int i = 0; i < k; i++) {
                head.push_back(rand() % 127);
                cout << head[i] << " ";
            }
            cout << endl;
        }
        else cout << "Array size should be from 0 to 100" << endl << "Your array size: " << k << endl;
    }
 
    void printList(vector <char> list) {
        for (char i : list)
            cout << i << " ";
    }
 
    void getInd(vector <char> list, int k) {
        int choice;
        if (k != 0) {
            cout << "Select which index to refer to: ";
            cin >> choice;
            if (choice > 0 && choice < (k + 1)) {
                cout << "Element value by index " << choice << " = " << list.at(choice - 1) << endl;
            }
            else cout << "The selected value must be greater than 0 and less than " << k + 1 << endl << "Your value: " << choice;
        }
        else cout << "Cannot select an element from an empty array" << endl << "Size of your array = 0" << endl;
    }
 
    void insert(vector <char> list, int k) {
        int ind;
        char s;
        cout << "Select the index to which you want to add an item: ";
        cin >> ind;
        if (ind <= k) {
            cout << "Enter the value you want to add to the array: ";
            cin >> s;
 
            list.insert(list.begin() + ind - 1, s);
            printList(list);
        }
        else cout << "Your index should be less then " << k + 1 << endl << "Your index: " << ind << endl;
    }
 
    void delBegin(vector <char> list, int k) {
        if (k != 0) {
            cout << "New array:" << endl;
            list.erase(list.begin());
            printList(list);
        }
        else cout << "Cannot remove an element from an empty array" << endl << "Size of your array: " << k << endl;
    }
 
    void delEnd(vector <char> list, int k) {
        if (k != 0) {
            cout << "New array:" << endl;
            list.pop_back();
            printList(list);
        }
        else cout << "Cannot remove an element from an empty array" << endl << "Size of your array: " << k << endl;
    }
 
public:
    List() {
        create(list, n);
        if (n >= 0 && n <= 100) {
            int choice = 0;
            cout << "Select an array operation" << endl
                 << "1) Index access" << endl
                 << "2) Element addition" << endl
                 << "3) Removing an element from the beginning" << endl
                 << "4) Removing an element from the end" << endl;
            cin >> choice;
            if (choice >= 1 && choice <= 4) {
                switch (choice) {
                    case 1: {
                        getInd(list, n);
                        break;
                    }
                    case 2: {
                        insert(list, n);
                        break;
                    }
                    case 3: {
                        delBegin(list, n);
                        break;
                    }
                    case 4: {
                        delEnd(list, n);
                        break;
                    }
                }
            }
            else cout << "Cannot select this operation. Operations are available: 1-4" << endl
                     << "Your operation number: " << choice << endl;
        }
    }
};
C++
1
2
3
4
int main() {
    List b;
    _getch();
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.06.2022, 14:02
Ответы с готовыми решениями:

Запрограммировать класс список
Создать класс список из элементов &quot;Люди&quot;, с атрибутами Фамилия(условно 3 фамилии-Иванов, Петров, Сидоров) и Возраст и операции доступа Get...

Вставка элемента в однонаправленный список.Изначально в программе создаётся однонаправленный список. После его заполнени
#include &lt;iostream&gt; #include &lt;iostream&gt; #include&lt;cstring&gt; #include&lt;Windows.h&gt; using namespace std; struct list{ int...

Класс: однонаправленный список
Поиогите прошу! Совсем не розбираюсь в этом. Создать класс - однонаправленный список, в котором определены следующие операции: +...

16
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
22.06.2022, 16:52
Цитата Сообщение от Asqwe264 Посмотреть сообщение
Запрограммировать класс "Однонаправленный список".
Цитата Сообщение от Asqwe264 Посмотреть сообщение
vector <char> list;
Над вами кто-то пошутил. В коде нет однонаправленного списка.
0
35 / 28 / 10
Регистрация: 11.04.2022
Сообщений: 197
22.06.2022, 18:02
Как-то недавно я спрашивал про деструктор класса списка, а точнее как правильно его реализовать, мне, конечно, на этот вопрос не ответили... Погуглив написал, есть заготовка с двусвязным списком, можно почистить и выбрать то, что вам нужно, структуру God точно можно удалить и тогда все будет куда яснее)
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
#pragma once
#include <iostream>
#include <iomanip>
struct God {
    std::string name;
    std::string mythology;
    std::string transport;
    std::string weapon;
    God();
};
 
struct Node {
    std::string value;
    Node* prev;
    Node* succ;
    God* god;
    Node();
};
 
 
 
class List
{
private: 
    Node* first;
    Node* last;
    int size = 0;
public:
    List();
    List(const std::string& val);
    List(const std::string& val, const std::string& mith, const std::string& name_of_god, const std::string& trans, const std::string& god_weapon);
    ~List();
    //void add(std::string& name);
    void erase(int pos);
    void add(std::string name, int pos);
    void add(std::string name, int pos, God* god_data);
    Node* find(int pos);
};
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
#include "List.h"
 
Node::Node()
    :value{ "" }, prev{ nullptr }, succ{ nullptr } {}
God::God()
    :mythology{" "},name{" "},transport{" "},weapon{" "} {}
 
List::List()
{
    first = nullptr;
    last = nullptr;
    size = 0;
 
}
 
List::List(const std::string& val)
{
    first = last = new Node;
 
    first->value = val;
    first->succ = nullptr;
    first->prev = nullptr;
 
    first->god = new God;
    first->god->mythology = " ";
    first->god->name = " ";
    first->god->transport = " ";
    first->god->weapon = " ";
 
    size++;
    
}
 
List::List(const std::string& val, const std::string& name_of_god, const std::string& mith, const std::string& trans, const std::string& god_weapon)
{
    first = last = new Node;
 
    first->value = val;
    first->succ = nullptr;
    first->prev = nullptr;
 
    first->god = new God;
    first->god->name = name_of_god;
    first->god->mythology = mith;
    first->god->transport = trans;
    first->god->weapon = god_weapon;
 
    size++;
 
}
 
List::~List()
{
    while (first)
    {
        Node* p = first;
        first = first->succ;
        delete p->god;
        delete p;
    }
}
 
Node* List::find(int pos)
{
    if (pos > size)
        return nullptr;
    int i = 0;
    Node* p = first;
    while (i++ < pos)
        p = p->succ;
    return p;
}
 
void List::erase(int pos)
{
    if (pos > size || pos < 0)
    {
        std::cout << "Incorrect pos"<<std::endl;
        exit(-2);
    }
    Node* p = find(pos);
 
    if (p->succ)
        p->succ->prev = p->prev;
    if (p->prev)
        p->prev->succ = p->succ;
    else
        first = p->succ;
    size--;
    delete p->god;
    delete p;
}
 
 
void List::add(std::string name,int pos)
{
 
    Node* temp = new Node;
    temp->god = new God;
    if (pos > size + 1)
    {
        std::cout << "Error: pos>size+1";
        exit(-1);
    }
    temp->value = name;
    if (!size)
    {
        size ++;
        this->first = temp;
        this->last = temp;
        return;
    }
    size += 1;
    Node* p = find(pos);
    if (p)
    {
        temp->prev = p;
 
        if (p->succ)
            p->succ->prev = temp;
        else
            last = temp;
        temp->succ = p->succ;
        p->succ = temp;
    }
    else
    {   
        temp->prev = last;
        temp->prev->succ = temp;
        last = temp;
    }
}
 
void List::add(std::string name, int pos, God* god_data)
{
 
    Node* temp = new Node;
    temp->god = new God;
    if (pos > size + 1)
    {
        std::cout << "Error: pos>size+1";
        exit(-1);
    }
    temp->value = name;
    temp->god->mythology = god_data->mythology;
    temp->god->name = god_data->name;
    temp->god->transport = god_data->transport;
    temp->god->weapon = god_data->weapon;
    if (!size)
    {
        size++;
        this->first = temp;
        this->last = temp;
        return;
    }
    size += 1;
    Node* p = find(pos);
    if (p)
    {
        temp->prev = p;
 
        if (p->succ)
            p->succ->prev = temp;
        else
            last = temp;
        temp->succ = p->succ;
        p->succ = temp;
    }
    else
    {
        temp->prev = last;
        temp->prev->succ = temp;
        last = temp;
    }
}
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
22.06.2022, 18:32
Цитата Сообщение от Enyt Посмотреть сообщение
Как-то недавно я спрашивал про деструктор класса списка
Много видел тем про списки.
Где создают узел, и называют его Списком.
Ну и в следствии по наклонной.
У вас походу был такой же случай.

Цитата Сообщение от Enyt Посмотреть сообщение
Погуглив написал, есть заготовка с двусвязным списком, можно почистить и выбрать то, что вам нужно
Тогда может и дерево будем так создавать, возьмем реализацию Графа и будем его резать пока не останется калека - дерево ?
Подход "отличный".

А код TC уже прокомментирован.

Добавлено через 1 минуту
Цитата Сообщение от Enyt Посмотреть сообщение
Как-то недавно я спрашивал про деструктор класса списка, а точнее как правильно его реализовать, мне, конечно, на этот вопрос не ответили...
Дайте ссылку. Посмотрим, ответили или нет.
0
Гвоздь Задиров
 Аватар для Folian
1719 / 1118 / 337
Регистрация: 25.01.2019
Сообщений: 2,946
22.06.2022, 19:45
Цитата Сообщение от SmallEvil Посмотреть сообщение
У вас походу был такой же случай.
Ну, справедливости ради, у него-то там нода с листом разнесена (кишки не смотрел).

Цитата Сообщение от SmallEvil Посмотреть сообщение
Где создают узел, и называют его Списком.
И таки да, не помню точно, но у Страуструпа читал про forward_list, где он то ли про это самое, то ли про возможность создания однонаправленного на одной ноде. И я тож, для интереса, делал мононодный. В голове сидит что и forward_list тож мононодный

Но эт всё фигня, чо я хотел-то:
Цитата Сообщение от SmallEvil Посмотреть сообщение
Где создают узел, и называют его Списком.
Недавно приезжал троллейбус с темами где ноду называли стеком
От эт реальная веселуха
Разработать программу формирования стека

в остальном согласен
0
35 / 28 / 10
Регистрация: 11.04.2022
Сообщений: 197
22.06.2022, 20:12
Цитата Сообщение от SmallEvil Посмотреть сообщение
Где создают узел, и называют его Списком.
Верно косяк осознал
Цитата Сообщение от SmallEvil Посмотреть сообщение
Тогда может и дерево будем так создавать, возьмем реализацию Графа и будем его резать пока не останется калека - дерево ?
Подход "отличный".
дада, подход многих форумчан, залить все желтой жидкостью с иронией и сарказмом - вот это подход отличный

Добавлено через 10 минут
Деструктор класса я не стремаюсь задавать такие вопросы, они могут быть неправильными/некорректными. Видимо лень открыть профиль и посмотреть тему)
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
22.06.2022, 20:21
Цитата Сообщение от Folian Посмотреть сообщение
то ли про возможность создания однонаправленного на одной ноде. И я тож, для интереса, делал мононодный.
Я ничего не имею против такой структуры списка, есть места где большего и не нужно.
Тогда "зачем платить больше".
Но когда это уже класс, это уже объект, то это уже неправильно и криво.

Цитата Сообщение от Folian Посмотреть сообщение
Недавно приезжал троллейбус с темами где ноду называли стеком
Со списком на Node названном списком, где деструктор удаляля сам себя бесконечно. Тоже весело )
К тому же, есть разница, между одной нодой, и работы с ним как со списком.
И Нодой, который представляют как списко.

Не буду искать. Просто попробую намалевать такое.

Добавлено через 1 минуту
Цитата Сообщение от Enyt Посмотреть сообщение
Видимо лень открыть профиль и посмотреть тему)
Оно мне надо ?
Я спросил.
Ответил, значит хочет поделиться.
Не ответил, зачем я буду лезть туда, куда не просят, думаете мне слишком надо ?
0
Гвоздь Задиров
 Аватар для Folian
1719 / 1118 / 337
Регистрация: 25.01.2019
Сообщений: 2,946
22.06.2022, 20:22
Цитата Сообщение от Enyt Посмотреть сообщение
дада, подход многих форумчан, залить все желтой жидкостью с иронией и сарказмом - вот это подход отличный
А в чём, собсна, дело?
Двусвязный и односвязный - разные штуки.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
22.06.2022, 20:44
Цитата Сообщение от Enyt Посмотреть сообщение
Как-то недавно я спрашивал про деструктор класса списка, а точнее как правильно его реализовать, мне, конечно, на этот вопрос не ответили...
Ответили.
Дальше наводящих вопросов от вас не было.

Цитата Сообщение от Enyt Посмотреть сообщение
*удалить объекты класса имеющие тип самого класса
Это к чему ? К какому коду ?
Вам ответили, ваш пример не имеет общего с темой ссылку которой вы предоставили.
Вы свой переделанный код списка показали ?

На вопрос.
Цитата Сообщение от Enyt Посмотреть сообщение
*удалить объекты класса имеющие тип самого класса
Никак, это недопустимо.

Разжевать ?
Объект класса, ссылка на объект, указатель на объект.
Между ними есть разница. Еще мельче разжевать ?

Добавлено через 14 минут
Enyt,
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
#include <iostream>
using namespace std;
 
struct TNode{
    int val;
    TNode* next=nullptr;
};
using pNode = TNode*;
 
struct List{
    int val;
    List* next=nullptr;
    ~List(){
        // что то там мутим
    }
};
 
int main()
{
    pNode root = new TNode();
    // root, нода нашего списка, он остается нодой, его удалением,
    // delete root, и всех его последующих элементов, занимается объемлющий его код
    // в данном случаем функция main()
    // Это список - представленный одной нодой.
    
    List list_or_not_list; // не список, хоть и может работать при должном извращении
    
    return 0;
}
Добавлено через 3 минуты
Цитата Сообщение от Folian Посмотреть сообщение
Разработать программу формирования стека
Видел, да весело )
0
35 / 28 / 10
Регистрация: 11.04.2022
Сообщений: 197
22.06.2022, 21:05
Цитата Сообщение от Folian Посмотреть сообщение
А в чём, собсна, дело?
Двусвязный и односвязный - разные штуки.
а я обратного и не говорил.
Цитата Сообщение от SmallEvil Посмотреть сообщение
Оно мне надо ?
Я спросил.
Ответил, значит хочет поделиться.
Не ответил, зачем я буду лезть туда, куда не просят, думаете мне слишком надо ?
Я про это) аж журчит...О причинах и следствиях не хочется говорить, да и муторно это все будет (и не по теме)
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
22.06.2022, 21:22
Цитата Сообщение от Enyt Посмотреть сообщение
Как-то недавно я спрашивал про деструктор класса списка, а точнее как правильно его реализовать, мне, конечно, на этот вопрос не ответили...
Это вы написали про какую то тему со списком, со словами "конечно, на этот вопрос не ответили...".
Объясните что означает это "конечно" ?

Тут одни уроды, просто послали меня на , конечно послали, смотрите начало предложения ?
У меня такой сложный вопрос, что никто не шарит, и конечно не смогли мне ответить ?
Другие варианты ?

Цитата Сообщение от Enyt Посмотреть сообщение
Я про это) аж журчит...О причинах и следствиях не хочется говорить, да и муторно это все будет (и не по теме)
Уже поздно. Назвался грибом...

По представленному мной коду и ответам на тему по вашей ссылке, все понятно ?
0
Гвоздь Задиров
 Аватар для Folian
1719 / 1118 / 337
Регистрация: 25.01.2019
Сообщений: 2,946
22.06.2022, 21:40
Цитата Сообщение от SmallEvil Посмотреть сообщение
Но когда это уже класс, это уже объект, то это уже неправильно и криво.
А ты пробовал std::forward_list? Там всё уродливо криво относительно других контейнеров. Конечно и задачи для него другие, но эт односвязный список, мононодный ли, иль иначе.
И, по сути, экземпляр мононодного будет держать только дату и указатель.

Цитата Сообщение от Enyt Посмотреть сообщение
а я обратного и не говорил.
А зачем тут тогда
Цитата Сообщение от Enyt Посмотреть сообщение
заготовка с двусвязным списком
Двусвязным! - там жырно было - списком?
0
35 / 28 / 10
Регистрация: 11.04.2022
Сообщений: 197
22.06.2022, 21:57
Цитата Сообщение от SmallEvil Посмотреть сообщение
Тут одни уроды, просто послали меня на , конечно послали, смотрите начало предложения ?
У меня такой сложный вопрос, что никто не шарит, и конечно не смогли мне ответить ?
Другие варианты ?
ну ну, не надо отсебятину добавлять, можете считать как угодно. Здесь суть не в получении готового ответа, а в содержания самого ответа. Если вы знаете лучше в данной тематике, это не значит что все также знают, а знают лучше/хуже (не важно). Что для кого-то 2+2=4 - это легко и понятно, то мб для других нет и не вижу смысла писать, что "это же банально, как можно написать такую дичь" - этот форум для этого и создан, чтобы люди писали сюда эту "дичь", я не беру в расчет задания "напишите программу <далее копипаста откуда угодно>", причем ответы на подобные вопросы я вижу куда более чаще, чем иного типа.

Добавлено через 5 минут
Цитата Сообщение от Folian Посмотреть сообщение
Сообщение от Enyt
а я обратного и не говорил.
А зачем тут тогда
Сообщение от Enyt
заготовка с двусвязным списком
Двусвязным! - там жырно было - списком?
что-то не понимаю, я не говорил, что двусвязный список= односвязный список. Наоборот, подчеркнул, что там двусвязный. Как по мне пример двусвязного списка для односвязного лучше, чем односвязный для двухсвязного.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
22.06.2022, 22:36
Цитата Сообщение от Folian Посмотреть сообщение
А ты пробовал std::forward_list?
уже не раз, самое свежее из "уродливого" )
Динамические структуры данных с++

Цитата Сообщение от Folian Посмотреть сообщение
И, по сути, экземпляр мононодного будет держать только дату и указатель.
Не будет.
C++
1
2
3
4
struct _Fwd_list_node_base{
 /// ....
       _Fwd_list_node_base* _M_next = nullptr;
}
C++
1
2
3
4
template<typename _Tp, typename _Alloc>
    struct _Fwd_list_base
    { 
    _Fwd_list_node_base _M_head;
Хидер MinGW

Кто то должен этот первый указатель, и последующие вести.
Сами себя узлы, полноценно обслуживать не способны.

Добавлено через 2 минуты
Цитата Сообщение от SmallEvil Посмотреть сообщение
Хидер MinGW
forward_list.h

Добавлено через 1 минуту
Цитата Сообщение от SmallEvil Посмотреть сообщение
Хидер MinGW
forward_list.h

Цитата Сообщение от SmallEvil Посмотреть сообщение
Сами себя узлы, полноценно обслуживать не способны.
Как сущность узел, могут обслуживать, как сущность список, не может, потому что он им не является.

Добавлено через 10 минут
Enyt, какой ответ вы ожидали получить по вашей теме ?
КАКОЙ ?
Вы не дали входных данных, задали расплывчатый общий вопрос.
Я на него заходил. Тогда он был еще свежим, ждал что скажет уже подключившийся форумчанин, что добавите вы, какую - то конкретику.
Нет ничего. Тема зыбыта и забита.

Цитата Сообщение от Enyt Посмотреть сообщение
это не значит что все также знают, а знают лучше/хуже (не важно). Что для кого-то 2+2=4 - это легко и понятно
Это тут совсем не при чем, ни в вашей теме ни в этой. Такого не пишут.

Тут ->>
Цитата Сообщение от lemegeton Посмотреть сообщение
Над вами кто-то пошутил. В коде нет однонаправленного списка.
В вашей теме :
Цитата Сообщение от Enyt Посмотреть сообщение
*удалить объекты класса имеющие тип самого класса
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Сообщение от Enyt
delete  pp;
Но это бесконечный рекурсивный вызов этого же самого деструктора.
Сообщение от Enyt
проверял и по этому примеру
Не вижу ничего общего с тем примером. Там элементы списка не пытаются уничтожать сами себя.
Все по сути. Без разжовываний.
В том что вы не способны дальше задать правильный вопрос, не наша вина.
И в догонку :
Цитата Сообщение от Enyt Посмотреть сообщение
Здесь суть не в получении готового ответа
Вторую часть я не понял, от слова совсем :
Цитата Сообщение от Enyt Посмотреть сообщение
а в содержания самого ответа.
Что в содержании ? Какое содержание не дяющего самого ответа вы ждете ?
Вам его дали. И тут и там. Содержание ваше.

Enyt, Идем читаем : Рекомендации по созданию тем

Добавлено через 11 минут
Folian, я даже не все показал, там еще обернуто раз Нода.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  template<typename _Tp, typename _Alloc>
    struct _Fwd_list_base
    {
    protected:
      typedef __alloc_rebind<_Alloc, _Fwd_list_node<_Tp>> _Node_alloc_type;
      typedef __gnu_cxx::__alloc_traits<_Node_alloc_type> _Node_alloc_traits;
 
      struct _Fwd_list_impl
      : public _Node_alloc_type
      {
    _Fwd_list_node_base _M_head;
         ...
      };
        _Fwd_list_impl _M_impl; 
      ....
};
Как думаешь зачем это ?
Можешь посмотреть темы от lemegeton по темах списков, у него проскакивает похожая реализация с "пустыми" нодами.
Не стану разбирать STL реализацию.
"Но истина где то рядом!"
0
35 / 28 / 10
Регистрация: 11.04.2022
Сообщений: 197
22.06.2022, 22:41
Цитата Сообщение от SmallEvil Посмотреть сообщение
В том что вы не способны дальше задать правильный вопрос, не наша вина.
Цитата Сообщение от SmallEvil Посмотреть сообщение
На вопрос.
Сообщение от Enyt
*удалить объекты класса имеющие тип самого класса
Никак, это недопустимо.
следующее же мое сообщение, которое было там, и вы его приметили, но теперь забыли о нем, видимо... чет не сходится.
ответ в той теме присутствует? вот и все, тему я считаю закрытой. ЧСВ мне больше можно не выражать, неинтересно.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
22.06.2022, 23:00
Цитата Сообщение от Enyt Посмотреть сообщение
*удалить объекты класса имеющие тип самого класса
Но вы же спрашивали не это ?
C++
1
2
3
struct Class{
   Class field;
};
Ваш вопрос ни к чему конкретному не был задан.
Даже этот вопрос полностью лишен смысла.

Перефразирую двумя вариантами ("я же эксперт, я все умею" )

1. Как удалить объекты имеющие поля с указателями на объекты такого же типа?
Смотрим по ситуации. Структуре объекта, назначению этих самых указателей.
2. Удалить объекты имеющий поля с таким же типом как объект ?
Такой объект не получится создать по правилам ЯП С++. Поэтому вопрос бессмысленный.

Могу еще навыдумывать ?
Enyt, Вы действительно считаете что мы должны заниматься выдумыванием и угадыванием ???
0
Гвоздь Задиров
 Аватар для Folian
1719 / 1118 / 337
Регистрация: 25.01.2019
Сообщений: 2,946
22.06.2022, 23:06
Цитата Сообщение от Enyt Посмотреть сообщение
Как по мне пример двусвязного списка для односвязного лучше, чем односвязный для двухсвязного.
А как по мне - лучше пример односвязного списка для односвязного и пример двусвязного списка для двусвязного.

Цитата Сообщение от Enyt Посмотреть сообщение
я не говорил, что двусвязный список= односвязный список. Наоборот, подчеркнул, что там двусвязный.
Ну и? А понимание-то есть? Я сколько уж тут писал про мононодную реализацию против разнесения ноды и класса.
Это разные реализации и каждой пофиг на двусвязный список.



Добавлено через 4 минуты
SmallEvil, короч, я завтра всё почитаю, а то сегодня я в лопату.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.06.2022, 23:06
Помогаю со студенческими работами здесь

Создать класс «Однонаправленный список»
Задание: Создать класс «Однонаправленный список», упорядоченный по возрастанию, элементами которого являются экземпляры класса «Сотрудник»....

Однонаправленный список list C++ шаблонный класс
Класс - однонаправленный список list. Дополнительно перегрузить следующие операции: + - добавить элемент в конец (list + item); -...

Создать класс обобщённый однонаправленный список
Создать заданный в варианте обобщенный класс. Определить в классе индексаторы, конструкторы, деструктор, необходимые функции и заданные...

Создать класс Кольцевой однонаправленный список
Создать класс Кольцевой_однонаправленный_список, используя для связи элементов списка указатели. Реализовать в нем методы добавления и...

Лаба С++ Класс  однонаправленный список list
Задание по лабе Класс  однонаправленный список list. Дополнительно перегрузить следующие операции:  доступ к элементу в...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru