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


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
baseC++20 Получение базового диапазона.
beginC++20 Получите итератор к первому элементу.
endC++20 Получите sentinel в конце reverse_view.
sizeC++20 Получение количества элементов.
Наследуется от view_interface Description
backC++20 Получите последний элемент.
emptyC++20 Проверьте, является ли пустой reverse_view .
frontC++20 Получите первый элемент.
operator[]C++20 Получите элемент в указанной позиции.
operator boolC++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.

Изображение вектора с элементами 10, 20 и 30. Первый элемент содержит 10 и помечен как begin(). Последний элемент содержит 30 и помечен как последний элемент. Мнимый прямоугольник после последнего элемента указывает sentinel и обозначает конец().

Замечания

После первого вызова 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.

Изображение вектора с элементами 10, 20 и 30. Первый элемент содержит 10 и помечен как begin(). Последний элемент содержит 30 и помечен как последний элемент. Мнимый прямоугольник после последнего элемента указывает sentinel и обозначает конец().

Замечания

Для 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ограничивающим.

См. также

<ranges>
reverse адаптер диапазона
Просмотр классов