C++ named requirements: ReversibleContainer
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)
|
массив фиксированного размера с элементами в смежной памяти
(шаблон класса) |
|
двусторонняя очередь
(шаблон класса) |
|
|
двусвязный список
(шаблон класса) |
|
|
изменяемый массив с элементами в смежной памяти
(шаблон класса) |
|
|
(C++26)
|
изменяемый массив фиксированной емкости с элементами в смежной памяти
(шаблон класса) |
|
коллекция пар ключ-значение, отсортированная по ключам, ключи уникальны
(шаблон класса) |
|
|
коллекция пар ключ-значение, отсортированная по ключам
(шаблон класса) |
|
|
коллекция уникальных ключей, отсортированная по ключам
(шаблон класса) |
|
|
коллекция ключей, отсортированная по ключам
(шаблон класса) |
Пример
Следующий пример выполняет итерацию по 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
|