Чаще всего итератор это просто ООП-обёртка над указателем. Но обычно эта обёртка несёт более высокий уровень абстракции, чем простой указатель. Звучит несколько странно, правда? Давайте разберёмся получше.
Назначение итераторов
Чем же занимаются итераторы и в чём их основное назначение? Итераторы служат для доступа к элементам контейнера. Естественно, они повсеместно используются как внутри самой STL, так и при её использовании программистами.
Типы итераторов
Итераторы бывают нескольких разных видов, которые отличаются по своему назначению и возможностям, которые они предоставляют. В STL существует четыре типа итераторов: iterator, reverse_iterator, bidirectional_iterator и random access iterator. Соответственно, Обычный итератор (iterator или forward iterator) используется для обхода (перебора) элементов в контейнере от начала к концу. Обратный итератор (reverse_iterator) позволяет делать это в обратном направлении – от конца к началу. Двунаправленный итератор (bidirectional_iterator), как следует из его названия, позволяет осуществлять перебор в обе стороны. И Итератор произвольного доступа (random access iterator) даёт доступ к любому элементу контейнера (непоследовательный, произвольный доступ).
Получение итераторов
Любой контейнер предоставляет функции для получения итераторов. Например, конейнер вектор, предоставляет для этого такие функции, как:
- begin() – получение итератора, указывающего на первый элемент контейнера end() – получение итератора, указывающего на конец контейнера rbegin() – получение итератора (обратного), указывающего на первый элемент контейнера с конца rend() – получение итератора (обратного), указывающего на конец контейнера… тоже с конца )
Создание собственных итераторов
Пользовательские итераторы создать очень просто – надо просто унаследовать свой собственный итератор от Шаблона класса iterator. Для указания типа итератора надо будет передать в шаблон одну из структур-параметров, которые определяют, какой тип итератора мы в итоге получим. Вот эти варианты:
Похожие записи: