Итераторы контейнеров.



Итератор похож на указатель своими основными операциями: указание одного отдельного элемента в коллекции объектов (называется доступ к элементу) и изменение себя так, чтобы указывать на следующий элемент (называется перебор элементов). Также должен быть определён способ создания итератора, указывающего на первый элемент контейнера, и способ узнать, перебраны ли все элементы контейнера. В зависимости от используемого языка и цели, итераторы могут поддерживать дополнительные операции или определять различные варианты поведения.

Главное предназначение итераторов заключается в предоставлении возможности пользователю обращаться к любому элементу контейнера при сокрытии внутренней структуры контейнера от пользователя. Это позволяет контейнеру хранить элементы любым способом при допустимости работы пользователя с ним как с простой последовательностью или списком. Проектирование класса итератора обычно тесно связано с соответствующим классом контейнера. Обычно контейнер предоставляет методы создания итераторов.

Необходимо отметить, что счётчик цикла иногда называют итератором цикла. Тем не менее, счётчик цикла обеспечивает только перебор элементов, но не доступ к элементу.

В библиотеке STL для доступа к элементам в качестве посредника используется обобщённая абстракция, именуемая итератором. Каждый контейнер поддерживает «свой» вид итератора, который представляет собой «модернизированный» интеллектуальный указатель, «знающий» как получить доступ к элементам конкретного контейнера. Стандарт C++ определяет пять категорий итераторов, описанных в следующей таблице:

Входные operator++, operator*, operator->, конструкторкопии, operator=, operator==, operator!= Обеспечивают доступ для чтения в одном направлении. Позволяют выполнить присваивание или копирование с помощью оператора присваиваивания и конструктора копии

Выходные operator++, operator*, конструктор копии Обеспечивают доступ для записи в одном направлении. Их нельзя сравнивать на равенство.

Однонаправленные operator++, operator*, operator->, конструктор копии, конструктор по умолчанию, operator=, operator==, operator!= Обеспечивают доступ для чтения и записи в одном направлении. Позволяют выполнить присваивание или копирование с помощью оператора присваиваивания и конструктора копии. Их можно сравнивать на равенство.

Двунаправленные operator++, operator--, operator*, operator->, конструктор копии, конструктор по умолчанию, operator=, operator==, operator!= Поддерживают все функции, описанные для однонаправленных итераторов (см. выше). Кроме того, они позволяют переходить к предыдущему элементу.

Произвольного доступа operator++, operator--, operator*, operator->, конструктор копии, конструктор по умолчанию, operator=, operator==, operator!=, operator+, operator-, operator+=, operator-=, operator<, operator>, operator<=, operator>=, operator[] Эквивалентны обычным указателям: поддерживают арифметику указателей, синтаксис индексации массивов и все формы сравнения.


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

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






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