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


Итераторы

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

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

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

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

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

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

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

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

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

Правую стрелку «означает, что можно заменить на». Любой алгоритм, который вызывает для итератора вывода должен работать славно с передним итератором, например, но не другим способом вращаться.

Доступны только для чтения к последовательности можно использовать работу.

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

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

Наконец, для чтения или записи в последовательности можно использовать работу.

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

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

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

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

Примечание

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

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

См. также

Ссылки

Библиотека стандартных шаблонов

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