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

Связанный двусторонний список - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Builder С++ и встроенный ассемблер, исправить код http://www.cyberforum.ru/cpp-beginners/thread150430.html
есть код для задачи: По двум целым массивам X и Y из 5 элементов,составить массив Z по правилу: Zi=Xi+Yi {mod 3}. Нужно исправить код по правилу Zi=min(Xi+Yi) #include <vcl.h> #pragma hdrstop #include "Unit1.h" #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall...
C++ Организовать функцию Дорогие форумчане,Надо Организовать функцию определения большего из двух чисел,которы передаются в функцию по ссылке..Буду очень признателен!!! http://www.cyberforum.ru/cpp-beginners/thread150406.html
Начинающий изучать C++ (подскажите литературу) C++
Здравствуйте всем, я хочу начать изучать C++, мне нужно чтоб мне посоветовали какие книжки почитать, для изучения синтаксиса языка C++ да и вообще, что-нибудь типа Фаронова для Делфи, то же самое и для C++. Сайтик специализированный где много исходников, описаний, уроков и обсуждений про этот язык (что то похожее на delphiexpert.ru только для C++), да и ещё среду для разработки порекомендуйте,...
Дан символ "с" C++
Дан символ "с". Вывести символ, который в кодовой таблице следует за символом "с".
C++ компилирую данный фаил с расширением *.h http://www.cyberforum.ru/cpp-beginners/thread150398.html
компилирую данный фаил с расширением *.h выдаёт ошибку в третей стоке. не могу понять причину. а потом, после первой компиляции и сообщения об ошибке, когда пробую компилирывать ещё раз, он просто ничего не делает. даже если в коде ошибки. ничего не пишет. жми на COMPILE сколько хочешь. среда Dev C++. помогите. #ifndef _PLORG_H_ #define _PLORG_H_ class Plorg { private: string...
C++ Вычислить сумму целых частей элементов массива В одномерном массиве, состоящем из n вещественных элементов, вычислить сумму целых частей элементов массива, расположенных после последнего отрицательного элемента подробнее

Показать сообщение отдельно
Spellz
1 / 1 / 0
Регистрация: 29.01.2010
Сообщений: 25
30.06.2010, 02:44  [ТС]     Связанный двусторонний список
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
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
#include <iostream>
using namespace std;
 
#ifndef MLIST_H
#define MLIST_H
//                      Class mListNode - node of my List Container class
template <class T>
class mListNode
{
public:
    mListNode();
    mListNode(const mListNode<T>&);
    ~mListNode();
    void setNext(mListNode* newNext) { next = newNext;};
    void setPrev(mListNode* newPrev) { prev = newPrev;};
    void setInfo(T* inf)             { info = inf;  };
    mListNode* getNext() const       { return next; };
    mListNode* getPrev() const       { return prev; };
    T* getInfo() const               { return info; };
    mListNode<T>& operator= (const mListNode<T>&);
protected:
    T* info;
    mListNode* prev;
    mListNode* next;
};
 
template <class T>
mListNode<T>::mListNode(const mListNode<T> & rhs)
{
    cout << "in COPY ctor of node\n";   
    info = rhs.info;
    prev = rhs.prev;
    next = rhs.next;
    cout << "exit COPY ctor of node\n";
}
template <class T>
mListNode<T>& mListNode<T>::operator =(const mListNode<T> &rhs)
{
    if (this == &rhs)
        return *this;
    delete info;
    delete prev;
    delete next;
    info = rhs.info;
    prev = rhs.prev;
    next = rhs.next;
    return *this;
}
template <class T>
mListNode<T>::mListNode():
info(0) , prev(0), next(0)
{
    //cout << "in ctor of node\n";
    //cout << "exit ctor of node\n";
}
 
template <class T>
mListNode<T>::~mListNode()
{
    cout << "info\n";
    delete info;
    info = NULL;
    cout << "prev\n";
    delete prev;
    prev = NULL;
    cout << "next\n";
    delete next;
    next = NULL;
}
 
 
//                      Class mList - my List Container
 
template <class T>
class mList
{
public:
    mList() { size = 0; head = 0;};
    mList(const mList<T>&);
    //~mList();
    void pushBack(T& inf);                      //добавляет информацию в конец списка
    void pushTop(T& inf);                       //добавляет информацию в начало списка
    mList<T>& operator=(const mList<T>&);
    T& operator[] (unsigned int num) const ;    //получение информации основываясь на номере в списке
    void clear();                               //отчистка списка
    void popFront();
    class exOutOfRange { };                     // oor exeption
protected:
    mListNode<T>* head;
    unsigned int size;
};
 
template <class T>
mList<T>::mList(const mList& rhs)
{
    head = rhs.head;
    size = rhs.size;
}
template <class T>
mList<T>& mList<T>::operator =(const mList<T> &rhs)
{
    if (this == &rhs)
        return *this;
    delete head;
    head = rhs.head;
    size = rhs.size;
}
 
template <class T>
T& mList<T>::operator[] (unsigned int num) const
{
    if (num > size - 1)
        throw exOutOfRange();
    mListNode<T>* tmp = head;
    for (unsigned int i = 0; i < num; i++)
    {
        tmp = tmp->getNext();
    }   
    T& info = *(tmp->getInfo());    
    return info;
}
 
template <class T>
void mList<T>::pushBack(T& inf)
{
    
    if (size == 0)
    {
        head = new mListNode<T>;
        head->setInfo(&inf);
        size++;
        return;
    }
    else
    {
        mListNode<T>* newNode = new mListNode<T>;
        mListNode<T>* current = head;
        mListNode<T>* next = 0;
        newNode->setInfo(&inf);
 
#define ever ;;
        for(ever)
        {
            next = current->getNext();
            if (next == NULL) //следущего нету - сюда и ставим
            {
                newNode->setPrev(current);
                newNode->setNext(NULL);
                current->setNext(newNode);
                break;
            }
            else //идем дальше
                current = next;
        }
 
    }
}
 
template <class T>
void mList<T>::pushTop(T& inf)
{
    if (head == NULL)
    {
        head = new mListNode<T>;
        head->setInfo(&inf);
        head->setPrev(NULL);
        head->setNext(NULL);
        size++;
        return;
    }
    else
    {
        mListNode<T>* newNode = new mListNode<T>;
        newNode->setInfo(&inf);
        newNode->setNext(head);
        newNode->setPrev(NULL);
        head->setPrev(newNode);
 
        head = newNode;
        size++;
    }
}
 
template <class T>
void mList<T>::clear()
{
    if (size == 0)
        return;
    while (size != 0)
    {
        popFront();
    }
 
}
template <class T>
void mList<T>::popFront()
{
    if (size == 0)
        return;
    mListNode<T>* tmp = head;
    head = head->getNext();
    delete tmp;
    size--;
    head->setPrev(NULL);
 
}
#endif
собственно почти все уже было выложенно

Добавлено через 1 час 55 минут
Убрав деструктор mListNode все прекрасно удаляется с одним но: память не освобождается. Тоесть я динамически создаю элементы, которые стандартный деструктор удалить не может. В свою же очередь мой деструктор вылетает с критической ошибкой. Застрелиться можно >.<
 
Текущее время: 07:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru