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


Класс reverse_iterator

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

template <class RandomIterator>
class reverse_iterator

Параметры

  • RandomIterator
    Тип, представляющий итератор для адаптации к применению в обратном порядке.

Заметки

Существующие контейнеры стандартной библиотеки шаблонов также задают типы reverse_iterator и const_reverse_iterator и обладают функциями-членами rbegin и rend, которые возвращают обратные итераторы. Эти итераторы обладают семантикой перезаписи. Адаптер reverse_iterator дополняет эти функции, поскольку предоставляет семантику вставки и может также использоваться в сочетании с потоками.

Итераторы reverse_iterator, требующие двунаправленного итератора, не должны обращаться к функциям-членам operator+=, operator+, operator-=, operator- или operator[], поскольку данные функции-члены могут использоваться только в сочетании с итераторами произвольного доступа.

Если диапазон итератора — [_First, _Last), где квадратная скобка слева обозначает включение в диапазон элемента _First, а круглая скобка справа — включение всех элементов до элемента _Left за исключением самого элемента _Left . Те же элементы будут включены в обращенную последовательность [rev – _First, rev – _Left); поэтому если элемент _Left на единицу превышает последний элемент в последовательности, то первый элемент rev – _First в обращенной последовательности указывает на элемент *(_Left – 1 ). Идентификатор, который связывает все обратные итераторы с их базовыми итераторами:

&*(reverse_iterator ( i ) ) == &*( i – 1 ).

На практике это означает, что в обращенной последовательности reverse_iterator будет ссылаться на элемент, позиция которого на единицу превышает позицию элемента, на который итератор ссылается в исходной последовательности (т. е. находится справа от данного элемента). Поэтому если итератор обращался к элементу 6 в последовательности (2, 4, 6, 8), то итератор reverse_iterator будет обращаться к элементу 4 в обращенной последовательности (8, 6, 4, 2).

Конструкторы

reverse_iterator

Формирование итератора reverse_iterator по умолчанию или итератора reverse_iterator из базового итератора.

Определения типов

difference_type

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

iterator_type

Тип, предоставляющий базовый итератор для итератора reverse_iterator.

указатель

Тип, содержащий указатель на элемент, к которому обращается итератор reverse_iterator.

reference

Тип, содержащий ссылку на элемент, к которому обращается итератор reverse_iterator.

Функции-члены

base

Восстановление базового итератора из соответствующего итератора reverse_iterator.

Операторы

operator*

Возвращение элемента, к которому обращается reverse_iterator.

operator+

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

operator++

Увеличение reverse_iterator до следующего элемента.

operator+=

Добавление заданного смещения из итератора reverse_iterator.

operator-

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

operator--

Уменьшение reverse_iterator до предыдущего элемента.

operator-=

Вычитание заданного смещения из итератора reverse_iterator.

operator->

Возвращение указателя на элемент, к которому обращается reverse_iterator.

operator[]

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

Требования

Заголовок: <iterator>

Пространство имен: std

См. также

Ссылки

<iterator>

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

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