Категории итераторов.Основные итераторы



Категории итераторов

Итераторы, как и контейнеры, реализуются в виде шаблонов классов.

Итераторы обладают такими достоинствами, как, например, автоматическое отслеживание размера типа, на который указывает итератор, автоматизированные

операции инкремента и декремента для перехода от элемента к элементу. Именно благодаря таким возможностям итераторы и являются фундаментом всей библиотеки. Итераторы можно условно разделить на две категории: основные и вспомогательные.

Основные итераторы

Основные итераторы используются наиболее часто. Они взаимозаменяемы, однако при этом нужно соблюдать иерархию старшинства (рис. 9).

 

Рис. 9. Иерархия итераторов

Итераторы ввода. Итераторы ввода (input iterator) стоят в самом низу

иерархии итераторов. Это наиболее простые из всех итераторов STL, и доступны они только для чтения. Итератор ввода может быть сравнен с другими итераторами на предмет равенства или неравенства, чтобы узнать, не указывают ли два разных итератора на один и тот же объект. Можно использовать оператор разыменовывания (*) для получения содержимого объекта, на который итератор указывает. Перемещаться от первого элемента, на который указывает итератор ввода, к следующему элементу можно с помощью оператора инкремента (++).

Итераторы вывода. Если итератор ввода предназначен для чтения данных, то итератор вывода (output iterator) служит для ссылки на область памяти, куда выводятся данные. Итераторы вывода можно встретить повсюду, где происходит хоть какая-то обработка информации средствами STL. Для данного итератора определены операторы присвоения (=), разыменовывания (*) и инкремента (++).

Однонаправленные итераторы. Если соединить итераторы ввода и вы-

вода, то получится однонаправленный итератор (forward iterator), который может перемещаться по цепочке объектов в одном направлении, за что и получил свое название. Для такого перемещения в итераторе определена операция инкремента (++). Кроме этого, в однонаправленном итераторе есть операторы сравнения (== и!=), присвоения (=) и разыменовывания (*).

Двунаправленные итераторы. Двунаправленный итератор (bidirectional

iterator) аналогичен однонаправленному итератору. В отличие от последнего

двунаправленный итератор может перемещаться не только из начала в конец

цепочки объектов, но и наоборот. Это становится возможным благодаря наличию оператора декремента (--). На двунаправленных итераторах базируются

различные алгоритмы, выполняющие реверсивные операции, например reverse.

Итераторы произвольного доступа. Итераторы этой категории − наиболее универсальные из основных итераторов. Они не только реализуют все

функции, свойственные итераторам более низкого уровня, но и обладают большими возможностями. Глядя на исходные тексты, в которых используются итераторы произвольного доступа, можно подумать, что имеешь дело с арифметикой указателей языка C++. Реализованы такие операции, как сокращенное сложение и вычитание (+= и -=), сравнение итераторов (<, >, <= и >=), операция обращения к заданному элементу массива ([]), а также и некоторые другие операции.


 


Дата добавления: 2015-12-21; просмотров: 22; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!