Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Результаты опроса: Стоит ли перегружать здесь оператор !=
Да 0 0%
Нет 2 100.00%
Голосовавшие: 2. Вы ещё не голосовали в этом опросе

Ответ
 
Опции темы Поиск в этой теме
Старый 07.11.2013, 22:04   #1
Black_Dynamite
Новичок
Джуниор
 
Регистрация: 07.11.2013
Сообщений: 1
Вопрос Итератор для двусвязного списка

Всем доброго времени суток! В общем лабу я не сдал, НО сдаваться не собираюсь и хочу ее добить.
Проблема: Помогите реализовать вывод узлов двусвязного списка с использованием итератора.
Среда: CodeBloks.

Прошу прощения, но я не нашел как выделить код C++


#include <iostream>
#include <locale.h>
using namespace std;

class Iterator;

class List
{
private:
struct Node
{
Node();
Node(const Node &original);
~Node();

int core;
Node *next, *previous;
};

int meter;
static Node *head, *tail, *ptr;
public:
friend class Iterator;

List();
List(const List &original) {};
List &operator = (const List &rhs);
~List();

void cyclic_list_creation();

Iterator begin() //Не знаю, как правильно реализовать эти функции
{
return Iterator(List::head);
}
Iterator end()
{
return Iterator(0);
}
};

class Iterator
{
public:
friend class List;

Iterator();
Iterator(List::Node* p);
Iterator &operator ++ ();
Iterator &operator -- ();
int &operator * ()
{
return ptr -> core;
}
int &operator -> ()
{
return ptr -> core;
}
bool operator == (Iterator &right)
{
return ptr == right.ptr;
}
private:
List::Node *ptr;
};

Iterator::Iterator():
ptr(0)
{}

Iterator::Iterator(List::Node* p):
ptr(p)
{}

Iterator& Iterator:perator ++ ()
{
ptr = ptr -> next;
return *this;
}

Iterator& Iterator:perator -- ()
{
ptr = ptr -> previous;
return *this;
}

List::Node::Node():
core(0),
next(0),
previous(0)
{}

List::Node::Node(const Node &original):
core(original.core),
next(0),
previous(0)
{
next = original.next;
previous = original.previous;
}

List::Node::~Node()
{}

List::List():
meter(0),
head(0),
tail(0),
ptr(0)
{}

List::~List()
{
delete head;
delete tail;
delete ptr;
}

void List::cyclic_list_creation()
{
Node *temp;
int i;
cout << "Введите значение узлов списка:\n";

for (;
{
cin >> i;
if (!i)
break;
else
{
temp = new Node;
temp -> next = 0;
temp -> core = i;
}

if (head != 0)
{
temp -> previous = tail;
tail -> next = temp;
tail = temp;
}
else
{
temp -> previous = 0;
head = tail = temp;
}
}
}

int main()
{
setlocale(LC_CTYPE,"Russian");

List abc;

abc.cyclic_list_creation();

Iterator iter = abc.begin();
Iterator end = abc.end();

for (; !(iter == end); ++iter) //перегружен префиксный оператор
{
cout << *iter << " ";
}

return 0;
}

Black_Dynamite вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка двусвязного списка SoTwisted Помощь студентам 1 21.02.2012 09:51
Сортировка двусвязного списка. Ninna Паскаль, Turbo Pascal, PascalABC.NET 0 30.05.2011 13:03
перестановка элементов двусвязного списка mansp Общие вопросы C/C++ 1 09.02.2011 19:46
Итератор списка по значению Link0 Общие вопросы по Java, Java SE, Kotlin 0 21.11.2010 14:02
[C++] Шейкер-сортировка двусвязного списка Attenti_ON Помощь студентам 0 17.11.2009 00:24