Udostępnij za pośrednictwem


reverse_view class (Standardowa biblioteka C++)

Widok elementów zakresu w odwrotnej kolejności.

Składnia

template<ranges::view V>
requires ranges::bidirectional_range<V>
class reverse_view : public ranges::view_interface<reverse_view<V>>;

Parametry szablonu

V
Typ widoku bazowego.
Ten typ musi spełniać ranges::bidirectional_rangewartość .

Właściwości widoku

Opis poniższych wpisów można znaleźć w temacie View class characteristics (Wyświetlanie właściwości klas)

Characteristic opis
Adapter zakresu views::reverse
Zakres bazowy Musi spełniać bidirectional_range maksymalnie random_access_range
Typ elementu Taki sam jak zakres bazowy
Wyświetl kategorię iteratora Taki sam jak zakres bazowy
Wielkości Tylko wtedy, gdy zakres bazowy spełnia sized_range
Jest constiterowalne Tylko wtedy, gdy zakres bazowy jest i common_view spełnia const-iterable
Wspólny zakres Tak
Pożyczony zakres Tylko wtedy, gdy zakres bazowy spełnia borrowed_range

Elementy członkowskie

Funkcje składowe Opis
KonstruktoryC++20 Skonstruuj element reverse_view.
baseC++20 Pobierz zakres bazowy.
beginC++20 Pobierz iterator do pierwszego elementu.
endC++20 Pobierz element sentinel na końcu obiektu reverse_view.
sizeC++20 Pobierz liczbę elementów.
Dziedziczone z view_interface Opis
backC++20 Pobierz ostatni element.
emptyC++20 Sprawdź, czy element reverse_view jest pusty.
frontC++20 Pobierz pierwszy element.
operator[]C++20 Pobierz element na określonej pozycji.
operator boolC++20 Sprawdź, czy element reverse_view nie jest pusty.

Wymagania

Nagłówek: <ranges> (od C++20)

Przestrzeń nazw: std::ranges

Opcja kompilatora: /std:c++20 lub nowsza jest wymagana.

Konstruktory

Konstruowanie wystąpienia obiektu reverse_view z widoku dwukierunkowego.

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)

Parametry

rg
Widok zapewniający odwrócony widok.

Aby uzyskać informacje o typie parametru szablonu, zobacz Parametry szablonu.

Wartość zwracana

Widok bazowego zakresu w odwrotnej kolejności.

Uwagi

Najlepszym sposobem utworzenia elementu reverse_view jest użycie adaptera views::reverse zakresu. Adaptery zakresów są zamierzonym sposobem tworzenia klas widoków. Typy widoków są widoczne w przypadku utworzenia własnego niestandardowego typu widoku.

1) Domyślny konstruktor inicjuje reverse_viewelement .
2) Utwórz element reverse_view z określonego widoku.

Przykład: 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

Pobiera kopię widoku bazowego.

// 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() &&;

Parametry

Brak.

Wartość zwracana

Widok bazowy.

begin

Pobierz iterator do pierwszego elementu w pliku 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>;

Parametry

Brak.

Wartość zwracana

Iterator wskazujący pierwszy element w elemecie reverse_view.

Obraz wektora z elementami 10, 20 i 30. Pierwszy element zawiera wartość 10 i ma etykietę begin(). Ostatni element zawiera wartość 30 i ma etykietę

Uwagi

Po pierwszym wywołaniu metody begin(), kolejne wywołania są uruchamiane w stałym czasie, O(1), niezależnie od liczby elementów w obiekcie reverse_view. Ma to wpływ na to, że reverse_view buforuje wartość last elementu , aby można było go wielokrotnie zwracać z beginelementu . Oznacza to, że nie należy ponownie używać widoku po zmodyfikowaniu bazowego kontenera. Jeśli zakres bazowy zostanie zmodyfikowany, wygeneruj nowy widok, który jest niedrogi.

2) Widok bazowy musi spełniać common_rangewartość , co oznacza, że widok bazowy musi mieć ten sam typ iteratora początku i końca.
3) Widok bazowy musi spełniać common_range wymagania dla widoku const, aby iterować w obiekcie const reverse_view.

end

Pobierz sentinel na końcu reverse_view

1) constexpr reverse_iterator<iterator_t<V>> end();
2) constexpr auto end() const requires common_range<const V>;

Parametry

Brak.

Wartość zwracana

Sentinel, który jest zgodny z ostatnim elementem w pliku reverse_view.

Obraz wektora z elementami 10, 20 i 30. Pierwszy element zawiera wartość 10 i ma etykietę begin(). Ostatni element zawiera wartość 30 i ma etykietę

Uwagi

W przypadku 2 widok podstawowy musi być spełniony common_range dla widoku const, co oznacza, że widok podstawowy musi mieć ten sam typ iteratora początku i końca.

size

Pobierz liczbę elementów.

constexpr auto size() requires ranges::sized_range<V>;
constexpr auto size() const requires ranges::sized_range<const V>;

Parametry

Brak.

Wartość zwracana

Liczba elementów w elem.reverse_view

Uwagi

Rozmiar widoku jest dostępny tylko wtedy, gdy zakres bazowy to sized_range, lub innymi słowy, ograniczony.

Zobacz też

<ranges>
reverse adapter zakresu
Klasy widoków