Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dzieli zakres na podgrupy na podstawie ogranicznika. Ogranicznik może być pojedynczym elementem lub widokiem elementów. Ogranicznik nie jest częścią wynikowych podzestawów.
Podstawowe różnice między elementem a a split_view lazy_split_view to:
| Widok | Może podzielić const zakres |
typ zakresu |
|---|---|---|
split_view |
nie | Obsługuje forward_range lub wyższe. |
lazy_split_view |
tak | Obsługuje input_range lub wyższe. |
Co sprawia, że lazy_split_view "leniwy" jest to, że nie patrzy na następny ogranicznik. Oznacza to, że może obsługiwać obsługę input_range , natomiast split_view wymaga co najmniej forward_range. Jest to spowodowane tym, że input_range jest jednoprzepustowa, natomiast forward_range umożliwia iterację wieloprzepustową.
Preferuj split_view , ponieważ jest to bardziej wydajne — chyba że musisz podzielić zakres, który ma wartość const. Jeśli chodzi o wydajność, split_view jest wydajniejszy.
A lazy_split_view ma mniej wydajne iteratory przyrostowe i porównanie niż split_view, ale nadal jest O(1). Wartość split_view ma lepszą wydajność, gdy odległość między ogranicznikami jest wystarczająco mała, aby podgrupy mieściły się w pamięci podręcznej procesora CPU, w tym przypadku ogranicznik skutecznie pre-caches następnej kolejności.
Składnia
template<input_range V, forward_range Pattern>
requires view<V> && view<Pattern> &&
indirectly_comparable<iterator_t<V>, iterator_t<Pattern>, ranges::equal_to> &&
(forward_range<V> || tiny_range<Pattern>)
class lazy_split_view : public view_interface<lazy_split_view<V, Pattern>>
Parametry szablonu
Pattern
Typ widoku, który określa sekwencję ogranicznika.
Wymaganie (forward_range<V> || tiny-range <Pattern>) oznacza, że jeśli bazowy zakres nie forward_rangejest , ogranicznik musi być .tiny_range A tiny_range to zakres ze statycznym zakresem, którego rozmiar to 0 lub 1. tiny_range<T> wymaga sized_range<T>, i T::size() musi być wyrażeniem stałym, które jest mniejsze lub równe 1.
V
Typ widoku bazowego.
Charakterystyki
Opis poniższych wpisów można znaleźć w temacie View class characteristics (Wyświetlanie właściwości klas)
Adapter zakresu: zakres bazowy: lazy_splitmusi spełniać input_range lub wyższą kategorię iteratora Wyświetl: taką samą jak podstawowy zakres Typ elementu: kolekcja range_reference_t<V>Rozmiar: brak wspólnego zakresu: Tak, gdy zakres bazowy jest zarówno forward_range i .common
Zakres pożyczony: nie jest constiterowalny: tylko wtedy, gdy zakres forward_range bazowy spełnia i jest constiterowalny
Elementy członkowskie
| Funkcje składowe | Opis |
|---|---|
| Konstruktory | Skonstruuj widok. |
baseC++20 |
Pobierz zakres bazowy. |
beginC++20 |
Pobierz iterator do pierwszego elementu w widoku. |
endC++20 |
Pobierz element sentinel na końcu widoku. |
Dziedziczone z view_interface |
Opis |
emptyC++20 |
Sprawdź, czy widok jest pusty. |
frontC++20 |
Pobierz pierwszy element. |
operator boolC++20 |
Sprawdź, czy widok 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 lazy_split_view
1) lazy_split_view() = default;
2) constexpr lazy_split_view(V base, Pattern pattern);
3) template<input_range R> requires constructible_from<V, views::all_t<R>> &&
constructible_from<Pattern, single_view<range_value_t<R>>>
constexpr lazy_split_view(R&& rg, range_value_t<R> e);
Parametry szablonu
Pattern
Typ ogranicznika.
R
Typ zakresu.
V
Typ widoku bazowego.
Parametry
e Pojedynczy element określający, gdzie należy podzielić widok. Element nie jest częścią wynikowych podranges.
base
Widok bazowy.
pattern
Widok elementów, które identyfikują, gdzie należy podzielić widok. Widok elementów nie jest częścią wynikowych podzestawów.
rg
Zakres do podzielenia.
Wartość zwracana
Wystąpienie lazy_split_view , które zawiera co najmniej jeden subranges.
Uwagi
Najlepszym sposobem utworzenia elementu lazy_split_view jest użycie adaptera views::lazy_split zakresu. Adaptery zakresów są zamierzonym sposobem tworzenia klas widoków. Typy widoków są widoczne tylko w przypadku, gdy chcesz utworzyć własny typ widoku niestandardowego.
1) Utwórz element lazy_split_view bez elementów. Widok podstawowy jest domyślnie skonstruowany. base() Zwraca kopię elementu V().
2) Utwórz element lazy_split_view , dzieląc widok przy użyciu sekwencji ograniczników.
3) Utwórz element lazy_split_view , dzieląc widok przy użyciu elementu ogranicznika.
Przykład: lazy_split_view
// requires /std:c++20 or later
#include <ranges>
#include <iostream>
#include <vector>
int main()
{
std::vector<int> rg{ 1, 2, 3, 1, 2, 3, 4, 5, 6 };
// pipe syntax using range adaptor
for (const auto& subrange : rg | std::views::split(3))
{
// Outputs:
// 1 2
// 1 2
// 4 5 6
for (const auto& elem : subrange)
{
std::cout << elem << ' ';
}
std::cout << '\n';
}
int delimiters[] = {2, 3};
for (auto splitRange : std::views::split(rg, delimiters)) // ctor syntax
{
// outputs 1 1 4 5 6
for (auto& i : splitRange)
{
std::cout << i << " ";
}
}
}
1 2
1 2
4 5 6
1 1 4 5 6
base
Pobiera kopię widoku bazowego.
// Uses a copy constructor to return the underlying view
1) constexpr V base() const & requires std::copy_constructible<V>;
// Uses a move constructor to return the underlying view
2) constexpr V base() &&;
Parametry
Brak.
Zwraca
Widok bazowy.
begin
Pobierz iterator do pierwszego elementu w widoku.
constexpr auto begin();
constexpr auto begin() const requires forward_range<V> && forward_range<const V>
Parametry
Brak.
Wartość zwracana
Iterator wskazujący pierwszy element w widoku.
end
Pobierz element sentinel na końcu widoku.
1) constexpr auto end() const;
2) constexpr auto end() requires forward_range<V> && common_range<V>;
Parametry
Brak.
Wartość zwracana
Sentinel, który jest zgodny z ostatnim elementem w widoku:
Uwagi
2) Wymaganie forward_range<V> oznacza, że widok V ma co najmniej iterator do przodu. Aby uzyskać więcej informacji na temat iteratorów zakresu, zobacz View class characteristics (Wyświetlanie cech klas). Wymaganie common_range<V> oznacza, że widok V ma identyczne typy iteracyjne i sentinel.
Zobacz też
<ranges>
lazy_split range adaptor,split_view klasa
klasy widoków