Поделиться через


Итераторы

Средства STL делают широко распространённую использование итераторов посредничать среди различных алгоритмов и последовательностей, на которых они работают.Имя типа итераторов (или его префикса) указывает категорию итераторов, необходимые для этого типа.В порядке возрастания степени категории перечислены в разделе how to:

  • Выходные данные.Итератор вывода X может иметь только значение V косвенное на нем хранятся, после чего оно необходимо увеличить до следующего хранилище, например in (*X++ = V(*),X = V, ++X(*) илиX = V" X++).

  • Входные данные.Итератор ввода X может представлять значение (исключая), которое указывает конец последовательности.Если итератор ввода не сравнивает равно его значению элемент -- последовательности, он может иметь значение V косвенное обращения к файлу для нее любое число раз, например in (V = " * "X).Чтобы разработать к следующим значением или конец последовательности, инкрементируете его, как в C++X" X++ или (V = " * "X++).После инкрементируете любую копию итератора ввода, ни одна из других копий можно безопасно сравнения, разыменования или увеличить после этого.

  • Вперед.Передний итератор X может занять место итератора вывода для записи или итератора ввода для чтения.Однако можно читать (посредством V = " * "X), просто записи (через *X = V) до переднего итератор.Также можно выполнить несколько копий переднего итератора, каждый из которых может быть разыменован и увеличивается вне зависимости.

  • Двунаправленные операции.Двунаправленный итератор X может принимать положение переднего итератора.Однако можно также уменьшить двунаправленный итератор, как в выражениях --X" X--или (V = " * "X--).

  • Прямой доступ.Итератор с произвольным доступом X можно принять место двухнаправленного итератора.Также можно выполнять множество ту же арифметические операции целого числа в произвольно-доступном итераторе, что указатель объекта.Для Nобъект integer, можно написать x[N] x + N" x - Nи N + X.

Обратите внимание, что указатель объекта может занять место итератора произвольного доступа или любого другого итератора.Все итераторы можно присвоить или копирования.Они предполагается, что упрощенными объектами и часто передаются и возвращаются значением, а не по ссылке.Обратите внимание, что ни одна из описанных выше операций могут вызывать исключение выполняно в допустимом итераторе.

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

output iterator
   -> forward iterator
   -> bidirectional iterator
   -> random-access iterator

Стрелка вправо означает "может быть заменено by". Любой алгоритм, который вызывает для итератора вывода должен работать славно с передним итератором, например, но NOT другой способ вокруг.

Для доступа только для чтения к последовательности, можно воспользоваться любым из следующих:

input iterator
   -> forward iterator
   -> bidirectional iterator
   -> random-access iterator

Итератор ввода самые простые всех категорий, в данном случае.

Наконец, для чтения и записи в последовательности, можно воспользоваться любым из следующих:

forward iterator
   -> bidirectional iterator
   -> random-access iterator

Указатель объекта всегда может служить итератор с произвольным доступом, поэтому он может служить любое категория итератора, если он поддерживает правильное чтение и запись в последовательность, то он обозначает.

Итератор Iterator за исключением указателя объекта также указать типы элементов, требуемые специализацией iterator_traits<Iterator>.Обратите внимание, что это могут быть выполнены путем наследования Iterator из общего базового класса итератор.

Эта "алгебра" итераторов базовая в практических всему еще в стандартной библиотеке шаблонов.Важно понимать посылы и ограничения каждой категории итератора увидеть, как итераторы используются контейнерами и алгоритмом в STL.

ПримечаниеПримечание

Можно также использовать для каждого внутри прохода по коллекциям STL.Дополнительные сведения см. в разделе Как Выполните итерацию по коллекции для каждого с STL.

Visual C++ теперь содержит проверяемых итераторы и отладки итераторы, чтобы убедиться, что не перезапишете границы контейнера.Дополнительные сведения см. в разделах Проверяемые итераторы и Поддержка итераторов отладка.

См. также

Ссылки

Стандартная библиотека шаблонов

Потокобезопасность в стандартной библиотеке C++