Полезно, когда нужно перебирать последовательно какие-то данные, мне, в частности, потребовалось для перебора кодеков и форматов во C++ враппере для FFMPEG, а так же получения набора параметров и именованных констант, которые они могут принимать.
Основные идеи данного паттерна изложены по этой ссылке: http://sourcemaking.com/design_patterns/iterator, а возможные реализации на C++ здесь:
- С применением методов для перемещения итератора, разыменования оного: http://sourcemaking.com/design_patterns/iterator/cpp/1
- С использованием операторов для перемещения итератора, разыменования оного: http://sourcemaking.com/design_patterns/iterator/cpp/2
Сведения эти - общетеоретические. Более практическое описание с разделением итераторов на типы приведено на cplusplus.com: http://www.cplusplus.com/reference/std/iterator/, в частности вводятся понятие следующих типов итераторов (а так же наглядная таблица, по которой можно понять какие методы и операторы должны определяться в классе-итераторе):
- Input - перемещается только вперёд, доступно только чтение значения (пример: поток stdin): http://www.cplusplus.com/reference/std/iterator/InputIterator/
- Output - перемещение только вперёд, доступна только запись значений (пример: поток stdout): http://www.cplusplus.com/reference/std/iterator/OutputIterator/
- Forward - объёдиняет свойства Input и Output итераторов: http://www.cplusplus.com/reference/std/iterator/ForwardIterator/
- Bidirectional - расширяет Forward итератор для перемещения назад: http://www.cplusplus.com/reference/std/iterator/BidirectionalIterator/
- Random Access - итератор с возможностью свободного перемещения назад/вперёд на произвольное количество позиций (пример: простой массив): http://www.cplusplus.com/reference/std/iterator/RandomAccessIterator/
А что бы несколько привести итераторы к одному виду, существует класс в стандартной библиотеке, называется ~std::iterator~, почитать можно здесь: http://www.cplusplus.com/reference/std/iterator/iterator/, там же приведён простой пример итератора.