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


<iterator>

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

#include <iterator>

Заметки

Итераторы представляют собой обобщение указателей, которое абстрагируется от их требований способом, предоставляющим программе C++ возможность применять однородные принципы обработки к разным структурам данных. Итераторы используются в качестве посредников между контейнерами и универсальными алгоритмами. Алгоритмы применяются не к определенным типам данных, а к диапазону, указанному типом итератора. К любой структуре данных, удовлетворяющей требованиям итератора, может применяться алгоритм. Существует пять типов, или категорий итераторов, каждая из которых обладает отдельным набором требований и соответствующими функциями:

  • Вывод: перемещение вперед, возможно сохранение, но не извлечение значений, обеспеченное структурами данных ostream и inserter.

  • Ввод: перемещение вперед, возможно извлечение, но не сохранение значений, обеспеченное элементом istream.

  • Прямой: перемещение вперед, возможно сохранение и извлечение значений.

  • Двунаправленный: перемещение вперед и назад, возможно сохранение и извлечение значений, предоставленных структурами данных list, set, multiset, map и multimap.

  • Произвольный доступ: доступ к элементам предоставляется в любом порядке, возможно сохранение и извлечение значений, предоставленных структурами данных vector, deque, string и array.

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

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

Функции

advance

Увеличивает итератор на указанное количество позиций.

back_inserter

Создает итератор, может вставлять элементы с обратной стороны указанного контейнера.

begin

Извлекает итератор для первого элемента в указанном контейнере.

cbegin

Извлекает постоянный итератор для первого элемента в указанном контейнере.

cend

Извлекает постоянный итератор для элемента, следующего за последним элементом в указанном контейнере.

distance

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

end

Извлекает итератор для элемента, следующего за последним элементом в указанном контейнере.

front_inserter

Создает итератор, может вставлять элементы с передней стороны указанного контейнера.

inserter

Адаптер итератора, добавляющий в контейнер новый элемент в указанной позиции.

make_checked_array_iterator

Создает checked_array_iterator, который может использоваться другими алгоритмами.

Примечание

Эта функция является предоставляемым Microsoft расширением стандартной библиотеки C++.Код, реализованный с помощью этой функции, нельзя перенести в стандартные среды сборки C, не поддерживающие это расширение Microsoft.

make_move_iterator

Возвращает итератор перемещения, содержащий предоставленный итератор в качестве сохраненного базового итератора.

make_unchecked_array_iterator

Создает unchecked_array_iterator, который может использоваться другими алгоритмами.

Примечание

Эта функция является предоставляемым Microsoft расширением стандартной библиотеки C++.Код, реализованный с помощью этой функции, нельзя перенести в стандартные среды сборки C, не поддерживающие это расширение Microsoft.

next

Выполняет итерацию заданное число раз и возвращает новую позицию итератора.

prev

Выполняет обратную итерацию заданное число раз и возвращает новую позицию итератора.

Операторы

operator!=

Проверяет объект итератора в левой части оператора на неравенство объекту итератора в правой части.

operator==

Проверяет объект итератора в левой части оператора на равенство объекту итератора в правой части.

operator<

Определяет, верно ли, что объект итератора в левой части оператора меньше объекта итератора в правой части.

operator<=

Определяет, верно ли, что объект итератора в левой части оператора меньше или равен объекту итератора в правой части.

operator>

Определяет, верно ли, что объект итератора в левой части оператора больше объекта итератора в правой части.

operator>=

Определяет, верно ли, что объект итератора в левой части оператора больше или равен объекту итератора в правой части.

operator+

Добавление смещения к итератору и возврат нового итератора reverse_iterator, который обращается к вставленному элементу в новой позиции смещения.

operator-

Вычитает один итератор из другого и возвращает разницу.

Классы

back_insert_iterator

Класс шаблона описывает объект итератора вывода. Он добавляет элементы в контейнер типа Контейнер, к которому обращается посредством защищенного объекта указателя, хранимый им и именуемый контейнером.

bidirectional_iterator_tag

Класс, предоставляющий тип возвращаемого значения для функции iterator_category, которая представляет собой двунаправленный итератор.

checked_array_iterator

Класс, который обращается к массиву при помощи проверенного итератора произвольного доступа.

Примечание

Этот класс является предоставляемым Microsoft расширением стандартной библиотеки C++.Код, реализованный с помощью этой функции, нельзя перенести в стандартные среды сборки C, не поддерживающие это расширение Microsoft.

forward_iterator_tag

Класс, предоставляющий тип возвращаемого значения для функции iterator_category, которая представляет собой прямой итератор.

front_insert_iterator

Класс шаблона описывает объект итератора вывода. Он добавляет элементы в контейнер типа Контейнер, к которому обращается посредством защищенного объекта указателя, хранимый им и именуемый контейнером.

input_iterator_tag

Класс, предоставляющий тип возвращаемого значения для функции iterator_category, которая представляет собой итератор ввода.

insert_iterator

Класс шаблона описывает объект итератора вывода. Он добавляет элементы в контейнер типа Контейнер, к которому обращается посредством защищенного объекта указателя, хранимый им и именуемый контейнером. Он также содержит защищаемый объект iterator класса Container::iterator под именем iter.

istream_iterator

Данный класс шаблона описывает объект итератора ввода. Он извлекает объекты класса Ty из входного потока, доступ к которому получает через сохраненный объект, относящийся к типу pointer на basic_istream<Elem, Tr>.

istreambuf_iterator

Данный класс шаблона описывает объект итератора ввода. Вставляет элементы класса Elem в буфер выходного потока, доступ к которому получает через сохраненный объект, относящийся к типу pointer на basic_streambuf<Elem, Tr>.

iterator

Данный класс шаблона используется как базовый тип для всех итераторов.

iterator_traits

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

move_iterator

Объект move_iterator содержит итератор произвольного доступа типа RandomIterator. Его поведение аналогично поведению итератора произвольного доступа, кроме случаев отмены ссылки. Результат operator* неявно приводится к value_type&&:, чтобы обеспечить rvalue reference.

ostream_iterator

Класс шаблона описывает объект итератора вывода. Вставляет объекты класса Type в буфер выходного потока, доступ к которому получает через сохраненный объект, относящийся к типу pointer на basic_ostream<Elem, Tr>.

Класс ostreambuf_iterator

Класс шаблона описывает объект итератора вывода. Вставляет элементы класса Elem в буфер выходного потока, доступ к которому получает через сохраненный объект, относящийся к типу pointer на basic_streambuf<Elem, Tr>.

output_iterator_tag

Класс, предоставляющий тип возвращаемого значения для функции iterator_category, которая представляет собой итератор вывода.

random_access_iterator_tag

Класс, предоставляющий тип возвращаемого значения для функции iterator_category, которая представляет собой итератор произвольного доступа.

reverse_iterator

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

unchecked_array_iterator

Класс, который обращается к массиву при помощи непроверенного итератора произвольного доступа.

Примечание

Этот класс является предоставляемым Microsoft расширением стандартной библиотеки C++.Код, реализованный с помощью этой функции, нельзя перенести в стандартные среды сборки C, не поддерживающие это расширение Microsoft.

См. также

Ссылки

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

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

Другие ресурсы

Файлы заголовков стандартных библиотек C++