Типы итератора: «Выходные данные» против «Входные данные» против «Вперед» против «Итератор произвольного доступа» - PullRequest
38 голосов
/ 06 марта 2011

Сколько типов итераторов существует в C ++ STL?На данный момент я знаю о них:

  • Итератор вывода
  • Итератор ввода
  • Итератор пересылки
  • Итератор произвольного доступа

Есть еще?Каковы различия между ними?Каковы ограничения и характеристики каждого?Какой тип используется, когда?

Ответы [ 3 ]

38 голосов
/ 06 марта 2011

Если можете, найдите и прочитайте «Стандартная библиотека C ++: Учебное пособие и справочник».Эта книга содержит целую главу об итераторах STL.

Вот кое-что из книги:

Iterator Category  Ability                          Providers
-----------------  -------------------------------  ----------------------------
Input iterator     Reads forward                    istream
Output iterator    Writes forward                   ostream, inserter
Forward iterator   Reads/writes forward             forward_list,
                                                      unordered_[multi]set,
                                                      unordered_[multi]map
Bidirectional it.  Reads/writes forward/backward    list, [multi]set, [multi]map
Random access it.  Reads/writes with random access  vector, deque string, array 
15 голосов
/ 06 марта 2011

Стандарт C ++ также имеет концепцию двунаправленного итератора, который является прямым итератором, который также может идти в обратном направлении (с operator--).Вместе эти пять образуют всю иерархию итераторов в параграфе 24.2 стандарта C ++.

Старый STL также имел концепцию Тривиальный итератор .См. Обзор итераторов для получения подробной информации о различных итераторах.

Дизайнеры повышения Abrahams, Siek и Witt представили гораздо более детальный набор концепций итераторов.

6 голосов
/ 06 марта 2011

Я подозреваю, что вы хорошо знаете ответ, но в любом случае, эти диаграммы очень полезны для выяснения этого

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