Русская Википедия:Итератор (шаблон проектирования)
Iterator — поведенческий шаблон проектирования. Представляет собой объект, позволяющий получить последовательный доступ к элементам объекта-агрегата без использования описаний каждого из агрегированных объектов.
Например, такие элементы как дерево, связанный список, хеш-таблица и массив могут быть пролистаны (и модифицированы) с помощью объекта Итератор.
Перебор элементов выполняется объектом итератора, а не самой коллекцией. Это упрощает интерфейс и реализацию коллекции, а также способствует более логичному разделению обязанностей.
Особенностью полноценно реализованного итератора является то, что код, использующий итератор, может ничего не знать о типе итерируемого агрегата.
Конечно же, (в C++) почти в любом агрегате можно выполнять итерации указателем void*, но при этом:
- не ясно, что является значением «конец агрегата», для двусвязного списка это &ListHead, для массива это &array[size], для односвязного списка это NULL
- операция Next сильно зависит от типа агрегата.
Итераторы позволяют абстрагироваться от типа и признака окончания агрегата, используя полиморфный Next (часто реализованный как operator++ в C++) и полиморфный aggregate.end(), возвращающий значение «конец агрегата».
Таким образом, появляется возможность работы с диапазонами итераторов, при отсутствии знания о типе итерируемого агрегата. Например:
Iterator itBegin = aggregate.begin();
Iterator itEnd = aggregate.end();
func(itBegin, itEnd);
И далее:
void func(Iterator itBegin, Iterator itEnd)
{
for( Iterator it = itBegin, it != itEnd; ++it )
{
}
}
Примеры
С#
PHP5
Пример итератора компоновщика на PHP5
Python
Rust
Шаблон:Нет источников Шаблон:Типы шаблонов проектирования