Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Задача на класс массив, конструкторы, доступ к элементу и другое 
V
    Опции темы
1122
Дата 29.9.2008, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 24.10.2007

Репутация: -1
Всего: нет



Извиняюсь. А не могли бы вы, написать прямой и обратный итератор для двусвязного списка, чтобы мне окончательно врубиться в тему. Сейчас сел... озадачился. Буду очень признателен. Может тогда вкурю что к чему, а то в инете (да и в книгах) про устройство итераторов практически ничего не написано (нашел только  в Павловской, но как-то мутненько). Заранее примного благодарен.
Класс, например, такой:

Код

template <class T> class List
{
   class Node
   {
     public:
            T d;
            Node *next, *prev;
            Node(T dat = 0)
            {
                   d = dat;
                   next = 0;
                   prev = 0;
            }
   };
   Node *pbeg, *pend;
   public:
          List()
          {
                pbeg = 0;
                pend = 0;
          }
          ~List();
          void addTail(T d);
          void addHead(T d);     
};


PM MAIL   Вверх
UnrealMan
Дата 30.9.2008, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 5
Всего: 32



Цитата(J0ker @  29.9.2008,  17:51 Найти цитируемый пост)
вместо cbegin и cend достаточно перегрузить begin и end как const 

В новом стандарте C++ методы контейнеров cbegin и cend будут введены в дополнение к begin и end. С помощью вызова этих новых методов программист сможет показывать, что получает итераторы для чтения данных контейнера и не собирается их модифицировать.

Цитата(1122 @  29.9.2008,  21:07 Найти цитируемый пост)
А не могли бы вы, написать прямой и обратный итератор для двусвязного списка

Если правильно написать обычный итератор (с операторами ++ и ––), то в обычных условиях обратный писать не нужно, т.к. его можно получить, используя std::reverse_iterator, взяв при этом обычный итератор за основу. Но если STL использовать нельзя, то, видимо, вместо std::reverse_iterator следует использовать собственноручно написанный велосипед с той же функциональностью.

Это сообщение отредактировал(а) UnrealMan - 30.9.2008, 02:20
PM MAIL   Вверх
1122
Дата 30.9.2008, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 24.10.2007

Репутация: -1
Всего: нет



А если не сложно, не могли бы вы код привести для списка двунаправленного?
PM MAIL   Вверх
J0ker
Дата 1.10.2008, 00:31 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 9
Всего: 14



Цитата(1122 @ 30.9.2008,  19:11)
А если не сложно, не могли бы вы код привести для списка двунаправленного?

в List добавить:
Код

public:
    class Iterator
    {
    private:
        Node *node;
    public:
        Iterator(Node *n = NULL): node(n) {}
        Iterator &operator=(const Iterator &iterator) {
            node = iterator.node;
            return *this;
        }
        Iterator(const Iterator &iterator) { *this = iterator; }
        bool operator==(const Iterator &iterator) const { return node == iterator.node; }
        bool operator!=(const Iterator &iterator) const { return !operator==(iterator); }
        Iterator &operator++() {
            if(node)
                node = node->next;
            return *this;
        }
        Iterator operator++(int) {
            Node *n = node;
            if(node)
                node = node->next;
            return Iterator(n);
        }
        
        T &operator*() const { return node->d; }
        T *operator->() const { return &node->d; }
    };

    Iterator begin() { return Iterator(pbeg); }
    Iterator end() { return Iterator(); }


для двунаправленного итератора нужны будут небольшие изменения, т.к. он должен иметь возможность пройти от end() назад


Это сообщение отредактировал(а) J0ker - 1.10.2008, 00:32


--------------------
user posted image
PM MAIL   Вверх
1122
Дата 1.10.2008, 07:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 24.10.2007

Репутация: -1
Всего: нет



Спасибо, J0ker, вам за все!
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

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


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0477 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.