Udostępnij za pośrednictwem


common_view class (Standardowa biblioteka C++)

Weź zakres, który może mieć różne typy iteracyjne i sentinel, i utwórz widok, który ma ten sam typ iteratora i sentinel. Jest to przydatne w przypadku wywoływania algorytmów STL, które akceptują zakresy określone przez pary iteracyjne.

Składnia

template<ranges::view V>
    requires (!ranges::common_range<V> && std::copyable<ranges::iterator_t<V>>)
class common_view : public ranges::view_interface<common_view<V>>;

Parametry szablonu

V
Typ widoku bazowego.

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::common
Zakres bazowy Musi spełniać forward_range lub wyższe
Typ elementu Taki sam jak zakres bazowy
Wyświetl kategorię iteratora forward_range lub random_access_range gdy zakres bazowy spełnia random_access_range i sized_range
Wielkości Tylko wtedy, gdy zakres bazowy spełnia sized_range
Jest constiterowalne Tylko wtedy, gdy zakres bazowy jest const iterowalny
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 common_view.
baseC++20 Pobierz widok bazowy.
beginC++20 Pobierz iterator do pierwszego elementu w widoku.
endC++20 Pobierz element sentinel na końcu widoku.
sizeC++20 Pobierz liczbę elementów w widoku.
Dziedziczone z view_interface Opis
backC++20 Pobierz ostatni element.
dataC++20 Pobierz wskaźnik do pierwszego elementu.
emptyC++20 Sprawdź, czy widok jest pusty.
frontC++20 Pobierz pierwszy element.
operator[]C++20 Pobierz element na określonej pozycji.
operator boolC++20 Sprawdź, czy widok nie jest pusty.

Uwagi

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

Ten widok jest przydatny w przypadku przekazywania zakresu, który ma różne typy iteracyjne/sentynel do starszego algorytmu, który oczekuje, że będą one takie same.

Wymagania

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

Przestrzeń nazw: std::ranges

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

Konstruktory

Utwórz wystąpienie klasy common_view.

1) common_view() = default;
2) constexpr explicit common_view(V v);

Parametry

v
Widok bazowy.

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

Uwagi

1) Domyślna konstrukcja elementu common_view.
2) Tworzy element common_view z widoku bazowego przy użyciu polecenia std::move(v). Błąd spowoduje, że jest V to wspólny zakres, aby uniknąć nieprawidłowego użycia, które negatywnie wpłynie na wydajność.

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

begin

Pobierz iterator do pierwszego elementu.

constexpr auto begin();
constexpr auto begin() const requires range<const V>;

Wartość zwracana

Iterator wskazujący pierwszy element w widoku:

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ę

end

Pobierz element sentinel na końcu widoku.

constexpr auto end();
constexpr auto end() const requires ranges::range<const V>;

Wartość zwracana

Sentinel, który jest zgodny z ostatnim elementem w widoku:

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ę

size

Pobierz liczbę elementów w widoku.

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 widoku.

Zobacz też

<ranges>
common adapter zakresu
klasy widoków