Вам нужно реализовать несколько итераторов в STL-подобном классе? - PullRequest
6 голосов
/ 05 сентября 2011

Я довольно хорошо знаком с STL и как его использовать.Мой вопрос ...

Если бы я должен был реализовать свой собственный тип контейнера STL, как определяются внутренние итераторы?Классы STL, как правило, имеют итераторы с последовательным или произвольным доступом, их const_-версии и потоковые итераторы.

Все ли эти итераторы полностью определены в каждом классе STL, или есть какой-то базовый класс, который вы наследуетечтобы получить большую часть функциональности итератора?Кто-нибудь знает хороший справочник о том, как реализовать класс, который поддерживает эти различные виды итераторов?

Ответы [ 2 ]

7 голосов
/ 05 сентября 2011

Как правило, вам нужно только реализовать iterator и const_iterator.Если желательны обратные итераторы, они могут быть получены с использованием экземпляров std::reverse_iterator.Поточные итераторы будут использовать operator>> и operator<<;как правило, они не подходят для контейнера (и ни один из стандартных контейнеров не предоставляет их).

4 голосов
/ 05 сентября 2011

Да, вам нужно два разных итератора для полной совместимости с stdlib.

Вы можете получить большинство typedefs правильно с наследованием от std::iterator, но это не поможет вам с реальной реализацией.

Boost.Iterator Facade пытается упростить определение ваших собственных итераторов, и учебник очень полезен.

Если вы попытаетесь сделать это без помощников, вам следует подумать о том, какую концепцию моделирует ваш итератор, а затем взглянуть на таблицы в § 24 стандарта C ++. Они описывают все операции, которые вам нужно поддерживать, и какова предполагаемая семантика.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...