Зачем нужен паттерн Iterator?

Зачем нужен этот поведенческий паттерн?

Паттерн Iterator:

1) предоставляет способ последовательного доступа ко всем элементам составного объекта

2) позволяет разделить классы коллекций и алгоритмов

3) придаёт "объектно-ориентированный статус"

4) полиморфный обход

Составной объект, такой как список, должен предоставлять способ доступа к его элементам без раскрытия своей внутренней структуры. Более того, иногда нужно перебирать элементы списка различными способами, в зависимости от конкретной задачи. Но вы, вероятно, не хотите раздувать интерфейс списка операциями для различных обходов, даже если они необходимы. Кроме того, иногда нужно иметь несколько активных обходов одного списка одновременно. Было бы хорошо иметь единый интерфейс для обхода разных типов составных объектов (т.е. полиморфная итерация). Паттерн Iterator позволяет все это делать. Ключевая идея состоит в том, чтобы ответственность за доступ и обход переместить из составного объекта на объект Iterator, который будет определять стандартный протокол обхода.

http://cpp-reference.ru/patterns/behavioral-patterns/iterator/ - вот здесь можете почитать про этот паттерн по-подробнее.