reverse_view
class (стандартная библиотека C++)
Представление элементов диапазона в обратном порядке.
Синтаксис
template<ranges::view V>
requires ranges::bidirectional_range<V>
class reverse_view : public ranges::view_interface<reverse_view<V>>;
Параметры шаблона
V
Тип базового представления.
Этот тип должен соответствовать ranges::bidirectional_range
.
Просмотр характеристик
Описание следующих записей см. в разделе "Просмотр характеристик класса"
Characteristic | Description |
---|---|
Адаптер диапазона | views::reverse |
Базовый диапазон | Должно соответствовать bidirectional_range до random_access_range |
Тип элемента | Совпадает с базовым диапазоном |
Просмотр категории итератора | Совпадает с базовым диапазоном |
Размер | Только если базовый диапазон удовлетворяет sized_range |
Is const -iterable |
Только если базовый common_view диапазон является и удовлетворяет const-iterable |
Общий диапазон | Да |
Заимствуемый диапазон | Только если базовый диапазон удовлетворяет borrowed_range |
Участники
Функции-члены | Description |
---|---|
КонструкторыC++20 | Создайте reverse_view |
base C++20 |
Получение базового диапазона. |
begin C++20 |
Получите итератор к первому элементу. |
end C++20 |
Получите sentinel в конце reverse_view . |
size C++20 |
Получение количества элементов. |
Наследуется от view_interface |
Description |
back C++20 |
Получите последний элемент. |
empty C++20 |
Проверьте, является ли пустой reverse_view . |
front C++20 |
Получите первый элемент. |
operator[] C++20 |
Получите элемент в указанной позиции. |
operator bool C++20 |
Проверьте, не является ли пустой reverse_view . |
Требования
Заголовок: <ranges>
(с C++20)
Пространство имен: std::ranges
Параметр компилятора: /std:c++20
или более поздней версии требуется.
Конструкторы
Создание экземпляра из reverse_view
двунаправленного представления.
1) reverse_view() requires default_initializable<V> = default; // default-constructs the underlying view
2) constexpr explicit reverse_view(V rg); // initializes the underlying view via std::move(r)
Параметры
rg
Представление для предоставления обратного представления.
Сведения о типе параметра шаблона см. в разделе "Параметры шаблона".
Возвращаемое значение
Представление базового диапазона в обратном порядке.
Замечания
Лучший способ создания reverse_view
— использовать views::reverse
адаптер диапазона. Адаптеры диапазона — это способ создания классов представления. Типы представлений предоставляются в случае, если вы хотите создать собственный тип пользовательского представления.
1) Конструктор по умолчанию инициализирует объект reverse_view
.
2) Создание reverse_view
из указанного представления.
Пример: reverse_view
// requires /std:c++20 or later
#include <ranges>
#include <iostream>
#include <vector>
int main()
{
std::vector<int> v{0, 1, 2, 3, -4, 5, 6};
auto rv = v | std::views::reverse;
for (auto e : rv) // 6 5 -4 3 2 1 0
{
std::cout << e << ' ';
}
}
6 5 -4 3 2 1 0
base
Получает копию базового представления.
// Uses a copy constructor to return the underlying view
constexpr V base() const& requires std::copy_constructible<V>;
// Uses a move constructor to return the underlying view
constexpr V base() &&;
Параметры
Нет.
Возвращаемое значение
Базовое представление.
begin
Получите итератор к первому элементу в элементе reverse_view
.
1) constexpr reverse_iterator<iterator_t<V>> begin();
2) constexpr reverse_iterator<iterator_t<V>> begin() requires common_range<V>;
3) constexpr auto begin() const requires common_range<const V>;
Параметры
Нет.
Возвращаемое значение
Итератор, указывающий на первый элемент в элементе reverse_view
.
Замечания
После первого вызова begin()
последующие вызовы выполняются в постоянное время, O(1), независимо от количества элементов.reverse_view
Это имеет последствия, так как reverse_view
кэширует значение last
, поэтому оно может возвращать его многократно из begin
. Это означает, что вы не должны повторно использовать представление после изменения базового контейнера. Если базовый диапазон изменен, создайте новое представление, которое является недорогим.
2) Базовое представление должно соответствовать common_range
, что означает, что базовое представление должно иметь тот же тип начала и конца итератора.
3) Базовое представление должно удовлетворять common_range
для константного представления, чтобы итерировать по объекту const reverse_view
.
end
Получение sentinel в конце reverse_view
1) constexpr reverse_iterator<iterator_t<V>> end();
2) constexpr auto end() const requires common_range<const V>;
Параметры
Нет.
Возвращаемое значение
Sentinel, следующий за последним элементом в элементе reverse_view
.
Замечания
Для 2 базовое представление должно соответствовать common_range
представлению const, что означает, что базовое представление должно иметь тот же тип начала и конца итератора.
size
Получение количества элементов.
constexpr auto size() requires ranges::sized_range<V>;
constexpr auto size() const requires ranges::sized_range<const V>;
Параметры
Нет.
Возвращаемое значение
Число элементов в массиве reverse_view
.
Замечания
Размер представления доступен только в том случае, если базовый диапазон является sized_range
ограничивающим.