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 const iterowalne |
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 . |
base C++20 |
Pobierz widok bazowy. |
begin C++20 |
Pobierz iterator do pierwszego elementu w widoku. |
end C++20 |
Pobierz element sentinel na końcu widoku. |
size C++20 |
Pobierz liczbę elementów w widoku. |
Dziedziczone z view_interface |
Opis |
back C++20 |
Pobierz ostatni element. |
data C++20 |
Pobierz wskaźnik do pierwszego elementu. |
empty C++20 |
Sprawdź, czy widok jest pusty. |
front C++20 |
Pobierz pierwszy element. |
operator[] C++20 |
Pobierz element na określonej pozycji. |
operator bool C++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:
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:
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.