Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
WinRar007
1 / 1 / 0
Регистрация: 08.04.2014
Сообщений: 80
#1

Односвязный список: В чём разница между struct и class? - C++

11.08.2014, 12:21. Просмотров 372. Ответов 5
Метки нет (Все метки)

После неудач работы с Vector, а так же отсутствия (Хотя, скорее всего, я просто плохо искал) хорошей русской документации по нему, решил запилить свой велосипед с самоваром и тёрками.
Список состоит из шаблона класса "заголовка" и шаблона класса элемента. В шаблоне ссылка на первый элемент, размер списка и функции по работе со списком. Основу элемента списка составляет указатель на переменную выбранного типа и указатели на прошлый и следующий элемент массива. Но вот зараза, что-то (Точнее, ничего) не работает!
Кликните здесь для просмотра всего текста

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
template <class TypeName>
class MassiveElem
{
public:
    int Num;
    MassiveElem()
    {
        Varriable = new TypeName;
    }
    ~MassiveElem()
    {
        Varriable = NULL;
        LastElem = NULL;
        NextElem = NULL;
    }
    TypeName *GetElem()
    {
        return(Varriable);
    }
    void SetElem(TypeName *Elem)
    {
        Varriable = Elem;
    }
    MassiveElem *GetLastElem()
    {
        return(LastElem);
    }
    MassiveElem *GetNextElem()
    {
        return(NextElem);
    }
    void SetLastElem(MassiveElem *Elem)
    {
        NextElem = Elem;
    }
    void SetNextElem(MassiveElem *Elem)
    {
        LastElem = Elem;
    }
private:
    TypeName *Varriable;
    MassiveElem <TypeName> *LastElem;
    MassiveElem <TypeName> *NextElem;
};
 
template <class UTypeName>
class Massive
{
public:
    Massive()
    {
        Start = new MassiveElem <UTypeName>;
        Start->SetLastElem(Start);
        Start->SetNextElem(Start);
    }
    ~Massive()
    {
 
    }
    int GetSize()
    {
        return(NumOfElem);
    }
    UTypeName *GetElem(int Num)
    {
        MassiveElem <UTypeName> *Elem = Start;
        for (int i = 0; i < Num; i++)
        {
            Elem = Elem->GetNextElem();
        }
        return (Elem->GetElem());
    }
    void *SetElem(int Num, UTypeName *Elem)
    {
        MassiveElem <UTypeName> *Elem = Start;
        for (int i = 0; i < Num; i++)
        {
            Elem = Elem->GetNextElem();
        }
        Elem->SetElem(Elem));
    }
    void AddElem(int Pos)
    {
        MassiveElem <UTypeName> *Elem1;
        Elem1 = Start;
        for (int i = 0; i < Num; i++)
        {
            Elem = Elem->GetNextElem();
        }
        MassiveElem <UTypeName> *Elem2 = Elem1->GetLastElem();
        MassiveElem <UTypeName> *Elem3 = new MassiveElem <UTypeName>;
        Elem1->SetLastElem(*Elem3);
        Elem2->SetNestElem(*Elem3);
        Elem3->SetLastElem(*Elem2);
        Elem3->SetNestElem(*Elem1);
        if (Elem3->GetNextElem() == Start)
        {
            Start = Elem3;
        }
        NumOfElem++;
    }
    void DelElem(int Pos)
    {
        if (NumOfElem > 0)
        {
            MassiveElem <UTypeName> *Elem1 = Start;
            for (int i = 0; i < Num; i++)
            {
                Elem1 = Elem1->GetNextElem();
            }
            if (Elem1 == Start)
            {
                Start = Elem1->GetNextElem();
            }
            MassiveElem <UTypeName> *Elem2 = Elem1->GetLastElem();
            MassiveElem <UTypeName> *Elem3 = Elem1->GetNextElem();
            Elem2->SetNextElem(*Elem3);
            Elem3->SetLastElem(*Elem2);
            NumOfElem--;
        }
    }
private:
    MassiveElem <TypeName> *Start;
    int NumOfElem = 1;
};

Ошибок вылезает дофига (Штук пятьдесят)
В основном такие:
Вложение 425629
Как я понял, первая группа ошибок ругается на передачу типа заголовка в тип элемента (Тьфу ты, написал блин...).
Второй группе не нравится присвоение указателей на элементы указателям на следующий/прошлый элемент.
Третьей опять не нравятся мои <TypeName>'ы.
Ах, да, ещё я тут впервые попробовал работать с кучей. Там тоже могут быть ошибки.
Заранее спасибо!
P.S. Да, это не "С-style lists". Объясните глупому, в чём разница между struct и class?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.08.2014, 12:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Односвязный список: В чём разница между struct и class? (C++):

Class forward_list (односвязный список) - C++
Задание - реализовать класс односвязный список. Не могу определиться с полями и конструктором List(size_type num, const value_type &amp;val =...

Какие есть отличия между struct и class кроме модификаторов доступа по умолчанию? - C++
Какие есть отличия между struct и class кроме модификаторов доступа по умолчанию?

В чём разница между заголовками <c***> и <***.h>? - C++
Пробовал несколько несложных примеров применения обоих вариантов. Результат выполнения идентичен. Компилятор никаких предупреждений не...

В чём разница между процедурами и функциями ? - C++
Мне просто нужно будет выполнить одну и ту же операцию несколько раз, а сама операция включает в себя несколько вычислений , создание...

Не объясните в чём разница между случаями - C++
Привет! Тут вот небольшой вопросик по поводу. Читаю книжку Страуструпа нашего и возник вопросик. ...

В чём разница между string и символьными массивами? - C++
Собсна какая тема, такой и вопрос. Если выразить его по-точнее, то в чём существенные плюсы того и другого в разных ситуациях? Изучаю С++...

5
WinRar007
1 / 1 / 0
Регистрация: 08.04.2014
Сообщений: 80
11.08.2014, 12:22  [ТС] #2
И куда делось вложение?
Односвязный список: В чём разница между struct и class?
0
John Prick
801 / 734 / 145
Регистрация: 27.07.2012
Сообщений: 2,107
Завершенные тесты: 3
11.08.2014, 12:56 #3
Одну ошибку вижу тут:
C++
1
2
3
4
5
6
7
8
template <class UTypeName>
class Massive
{
    // ...
private:
    MassiveElem <TypeName> *Start;
    // ...
};
UTypeName и TypeName.
1
WinRar007
1 / 1 / 0
Регистрация: 08.04.2014
Сообщений: 80
11.08.2014, 13:06  [ТС] #4
John Prick,
Спасибо. Так и знал, что что-нибудь пропущу.

Добавлено через 56 секунд
Ошибок, правда, не убавилось.
0
zss
Модератор
Эксперт С++
6403 / 5969 / 1945
Регистрация: 18.12.2011
Сообщений: 15,370
Завершенные тесты: 1
11.08.2014, 13:12 #5
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
template <class UTypeName>
class Massive
{
public:
Massive():NumOfElem(1) // добавлено :NumOfElem(1) 
....
 
    void *SetElem(int Num, UTypeName *Elem)
    {
        MassiveElem <UTypeName> *Elem = Start;
        for (int i = 0; i < Num; i++)
        {
            Elem = Elem->GetNextElem();
        }
        Elem->SetElem(Elem); // удалена скобка
    }
    void AddElem(int Pos)
    {
        MassiveElem<UTypeName> *Elem1; // <UTypeName> тут была опечатка
...... 
private:
    MassiveElem <UTypeName> *Start; // <UTypeName> а не <TypeName>
    int NumOfElem; // убрано =1
};
1
WinRar007
1 / 1 / 0
Регистрация: 08.04.2014
Сообщений: 80
11.08.2014, 14:00  [ТС] #6
Спасибо большое! А я, как последний дурак, для своей невнимательности ещё и тему создал.
Жесть, теперь спать не смогу.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.08.2014, 14:00
Привет! Вот еще темы с ответами:

В чём разница между динамической и статической линковкой библиотеки? - C++
В чём разница между динамической и статической линковкой библиотеки? Если можно с примером.

В чём разница между состояниями потока failbit и badbit? - C++
В чём разница между failbit и badbit? Если просто просматривать ошибку ввода в моём случае, то он всегда пишет failbit (в цикле вайл при...

Различные варианты инициализации указателя - в чём точная разница между ними? - C++
Немного непонятен один момент. Есть некий класс Statement (конструктор используется по умолчанию). Вот четыре различных записи...

Class vs Struct - C++
класс или структура что создаётся быстрее? перегружаются ли конструкторы структуры? если существуют (не уверен) сколько занимают в...


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

Или воспользуйтесь поиском по форуму:
6
Yandex
Объявления
11.08.2014, 14:00
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru