• Сб. Апр 20th, 2024

Итераторы (Iterator) назначение итераторов использование итераторов

Автор:lovewp

Июн 26, 2013

stl: итераторы stl
Итераторы являются частью Standard Template Library, о чём я уже упоминал в статье про STL, но я не объяснил толком что это такое. Если, как у нас с вами уже принято, говорить простым языком, то можно сказать, что Итератор это абстрактный класс, который ведёт себя почти так же, как указатель. Итераторы используются в STL повсеместно. Для того, что бы грамотно и правильно использовать функционал STL, нам нужно будет разобраться в том числе и с итераторами, их использованием, созданием пользовательских итераторов и понять какие преимущества дают итераторы по сравнению с обычными указателям.

Чаще всего итератор это просто ООП-обёртка над указателем. Но обычно эта обёртка несёт более высокий уровень абстракции, чем простой указатель. Звучит несколько странно, правда? Давайте разберёмся получше.

Назначение итераторов

Чем же занимаются итераторы и в чём их основное назначение? Итераторы служат для доступа к элементам контейнера. Естественно, они повсеместно используются как внутри самой 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. Для указания типа итератора надо будет передать в шаблон одну из структур-параметров, которые определяют, какой тип итератора мы в итоге получим. Вот эти варианты:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *