Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

двусвязный список c++

32K
27 ноября 2007 года
fun_phantom
3 / / 27.11.2007
Задали задачу на перегрузку нескольких операторов для класса Двусвязный список, а я даже не знаю как сам список реализовать.Мне бы функции добавления и взятия из списка посмотреть а дяльше сам разберусь.
320
27 ноября 2007 года
m_Valery
1.0K / / 08.01.2007
Цитата: fun_phantom
Задали задачу на перегрузку нескольких операторов для класса Двусвязный список, а я даже не знаю как сам список реализовать.Мне бы функции добавления и взятия из списка посмотреть а дяльше сам разберусь.


Делали уже,смотри ТУТ.Там я приводил пример шаблонного двусвязного списка,с операторами.

38K
24 апреля 2008 года
sorrelcat
6 / / 17.04.2008
суть такова: есть класс строки:
[HTML]
class str //класс строки
{ //закрытая секция по умолчанию
int length; //длина строки
char *p; //указатель на массив символов для строки
public: //открытая секция класса
str();
str(const char *); //строка задается датой
str(int); //строка задается длиной
~str(); //деструктор очищает динамически выделенную память
str(const str &); //конструктор копий
void echo_data(); //функция выводит в стандартный поток длину и содержимое строки
str operator=(str); //перегруженный оператор присваивания
};

str::str()
{
cout << "Default str constructor without parameters" << endl;
length=maxl+1;
p=new char[length];
for (int j=0;j<length-1; ++j) p[j]='_';
p[length-1]='\0';
}

str::str(const char *t)
{
cout << "Constructor str with char* parameter" << endl;
int a=strlen(t);
if(a>maxl) {cout << "Error! Too long string" << endl; return;}
length=a+1;
p=new char[length];
for (int i=0;i<a; ++i) p=t;
p[length-1]='\0';
}

str::str(int i)
{
cout << "Constructor str with default int parameter" << endl;
if(i>maxl) {cout << "Error! Too long string" << endl; return;}
p=new char[i+1];
length=i+1;
for (int j=0;j<length-1; ++j) p[j]='a';
p[length-1]='\0';
}

str::str(const str &t)
{
cout << "Str copy constructor" << endl;
length=t.length;
p=new char [length];
for (int i=0;i<length; ++i) p=t.p;
}

str::~str()
{
cout << "Destructor str for " << endl;
echo_data();
delete [] p;
}

void str::echo_data()
{
cout << length-1 << "\t";
for (int i=0; i<length; ++i) cout << p;
cout << endl;
}

str str::operator =(str t)
{
cout << "Str operator =" << endl;
if(t.p[t.length-1]!='\0') {t.length++; t.p[length-1]='\0';}
delete [] p;
p=new char[t.length];
length=t.length;
for(int i=0;i<length-1;++i) p=t.p;
p[length-1]='\0';
return *this;
}
[/HTML]

и класс элемента двусвязного списка:

[HTML]
class delem //класс элемента двусвязного списка
{
private: //закрытая секция содержит данные - члены
str data; //строка данных списка
delem *next; //указатель на следующий элемент
delem *prev; //указатель на предыдущий элемент
public: //открытая секция содержит функции - члены доступа к данным - членам
delem(); //конструктор по умолчанию
delem(delem*, str); //конструктор с параметром
delem(const delem &); //конструктор копий
~delem(); //деструктор
delem operator=(delem); //перегруженный оператор присваивания, копирует данные и связи
};

delem::delem() //конструктор по умолчанию создает элемент список из 1 пустой строки
{
cout << "Delem default constructor" << endl;
data="\0";
next=NULL;
prev=NULL;
}

delem::delem(delem *t, str k="\0") //конструктор с параметром по умолчанию
{ //создает элемент списка после указанного
cout << "Delem constructor with default parameter" << endl;
prev=t;
next=t->next;
data=k; //и присваивает строке значение; если оно не заданное явно, то присваивается значение по умолчанию
}

delem::~delem()
{
cout << "Delem destructor" << endl;
}

delem::delem(const delem &t) //конструктор копий копирует строку элемента в новый элемент с нулевыми связями
{
cout << "Delem copy constructor" << endl;
next=NULL;
prev=NULL;
data=t.data;

}

delem delem::operator =(delem t)
{
next=t.next;
prev=t.prev;
data=t.data;
}
[/HTML]
компилятор ругается и падает. Что делать?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог