Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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.