LINUX.ORG.RU

C++: создание своего итератора


0

0

Подскажите пожалуйста, как нормально создать свой класс итераторов c рандомным доступом.
Насколько я понял (а возможно я понял неправильно) необходимо и достаточно создать класс с переопределенными операторами ==,<,++,--,* и &. Однако обычно все делается через наследование базовых классов. Или этот метод используется только при небольшом объеме изменений?

anonymous

Если тебе STL совместимый итератор нуден, то наверно будет достаточно. Наследование не нужно.

Reset ★★★★★
()

Можно наследовать от std::iterator, которые определяет серию typedef, которые, быть может, где-нибудь да и пригодятся. Оператор & не перегружают. Вместо него перегружают * и ->. Вообще, эта тема хорошо описана у Страуструпа.

dave ★★★★★
()

>Однако обычно все делается через наследование базовых классов

тут статический полиморфизм, неявный интерфейс (концепт) итератора. наследование тут ни к чему, а явная поддержка в языке обещается только с C++0x - пока же просто аккуратно следуй инструкциям

jtootf ★★★★★
()

Для работы с алгоритмами STL в классе итератора потребуется ряд typedef-ов. Помню точно, что нужно определить типы:

difference_type
iterator_category (в твоем случае это std::random_access_iterator_tag)
pointer
reference
value_type

Вроде так.)

anonymous
()

Да и для итератора произвольного доступа могут понадобиться перегрузки += и +. Из ругани компилятора можно сделать все необходимые выводы.

anonymous
()

Всем спасибо.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.