Spec-Zone.ru › C++

Именованные требования C++: ReversibleContainer

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

Требования

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

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

Типы

Имя Тип Требования
typenameX::reverse_iterator std::reverse_iterator<X::iterator> тип итератора, тип значения которого — T
typenameX::const_reverse_iterator std::reverse_iterator<X::const_iterator> тип константного итератора, тип значения которого — T

Выражения

Типы reverse_iterator и const_reverse_iterator в следующей таблице обозначают соответственно typenameX::reverse_iterator и typenameX::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:

array
(C++11)
массив фиксированного размера, непрерывно размещённый в памяти
(шаблон класса)
deque
двусторонняя очередь
(шаблон класса)
list
двусвязный список
(шаблон класса)
vector
изменяемый по размеру массив с непрерывным размещением в памяти
(шаблон класса)
inplace_vector
(C++26)
массив с непрерывным размещением в памяти, изменяемым размером и фиксированной ёмкостью
(шаблон класса)
map
набор пар «ключ — значение», отсортированных по ключам; ключи уникальны
(шаблон класса)
multimap
набор пар «ключ — значение», отсортированных по ключам
(шаблон класса)
set
набор уникальных ключей, отсортированных по ключам
(шаблон класса)
multiset
набор ключей, отсортированных по ключам
(шаблон класса)

Пример

В следующем примере выполняется обход vector (у которого есть устаревшие итераторы произвольного доступа) в обратном порядке.

#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 Применяется к Опубликованное поведение Корректное поведение
LWG 2105 C++98 typenameX::const_reverse_iterator должен был
быть типом итератора со значением типа constT
должен быть типом константного
итератора со значением типа T

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/named_req/ReversibleContainer

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API