Namespaces
Variants

C++ named requirements: ReversibleContainer

From cppreference.net
C++ named requirements

ReversibleContainer — это Container , который имеет итераторы, соответствующие требованиям либо LegacyBidirectionalIterator , либо LegacyRandomAccessIterator . Такие итераторы позволяют обходить ReversibleContainer в обратном порядке.

Содержание

Требования

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

Тип Определение
X тип ReversibleContainer
T value_type типа X
Значение Определение
a значение типа X

Типы

Название Тип Требования
typename X :: reverse_iterator std:: reverse_iterator < X :: iterator > тип итератора, чей тип значения является T
typename X :: const_reverse_iterator std:: reverse_iterator < X :: const_iterator > тип константного итератора, чей тип значения является T

Выражения

Типы reverse_iterator и const_reverse_iterator в следующей таблице обозначают typename X :: reverse_iterator и typename X :: const_reverse_iterator соответственно.

Выражение Тип Семантика Сложность
a. rbegin ( ) reverse_iterator
const_reverse_iterator для константного a
reverse_iterator ( a. end ( ) ) Константная
a. rend ( ) reverse_iterator
const_reverse_iterator для константного a
reverse_iterator ( a. begin ( ) ) Константная
a. crbegin ( ) const_reverse_iterator const_cast < const X & > ( a ) . rbegin ( ) Константная
a. crend ( ) const_reverse_iterator const_cast < const X & > ( a ) . rend ( ) Константная

Типы библиотек

Следующие стандартные библиотечные типы удовлетворяют ReversibleContainer требованиям:

(C++11)
массив фиксированного размера с элементами в смежной памяти
(шаблон класса)
двусторонняя очередь
(шаблон класса)
двусвязный список
(шаблон класса)
изменяемый массив с элементами в смежной памяти
(шаблон класса)
изменяемый массив фиксированной емкости с элементами в смежной памяти
(шаблон класса)
коллекция пар ключ-значение, отсортированная по ключам, ключи уникальны
(шаблон класса)
коллекция пар ключ-значение, отсортированная по ключам
(шаблон класса)
коллекция уникальных ключей, отсортированная по ключам
(шаблон класса)
коллекция ключей, отсортированная по ключам
(шаблон класса)

Пример

Следующий пример выполняет итерацию по vector (который имеет legacy random-access iterators ) в обратном порядке.

#include <iostream>
#include <vector>
int main()
{
    std::vector<int> v = {3, 1, 4, 1, 5, 9};
    for (std::vector<int>::const_reverse_iterator i{v.crbegin()}; i != v.crend(); ++i)
        std::cout << *i << ' ';
    std::cout << '\n';
}

Вывод:

9 5 1 4 1 3

Отчёты о дефектах

Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Applied to Behavior as published Correct behavior
LWG 2105 C++98 typename X :: const_reverse_iterator был
требовался как тип итератора с типом значения const T
требуется как константный
тип итератора с типом значения T