split_view
class (Standardowa biblioteka C++)
Dzieli widok na podgrupy na podstawie ogranicznika. Ogranicznik może być pojedynczym elementem lub widokiem elementów. Ogranicznik nie jest częścią wynikowego split_view
elementu .
Powiązany widok to lazy_split_view
klasa. Podstawowe różnice między elementami split_view
i 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. |
Preferuj split_view
, ponieważ jest bardziej wydajny, chyba że musisz podzielić zakres o wartości const
.
Składnia
template<forward_range V, forward_range Pattern>
requires view<V> && view<Pattern> &&
indirectly_comparable<iterator_t<V>, iterator_t<Pattern>, ranges::equal_to>
class split_view : public view_interface<split_view<V, Pattern>>;
Parametry szablonu
Pattern
Typ widoku, który określa sekwencję ogranicznika.
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::split |
Zakres bazowy | Taki sam jak zakres bazowy |
Typ elementu | range_reference_t<V> |
Wyświetl kategorię iteratora | Spełnia forward_range |
Wielkości | Nie. |
Jest const iterowalne |
Nie. |
Wspólny zakres | Tylko wtedy, gdy zakres bazowy spełnia common_range |
Pożyczony zakres | Nie. |
Elementy członkowskie
Funkcje składowe | Opis |
---|---|
Konstruktory | Skonstruuj widok. |
base C++20 |
Pobierz zakres bazowy. |
begin C++20 |
Pobierz iterator do pierwszego elementu. |
end C++20 |
Pobierz element sentinel na końcu widoku. |
Dziedziczone z view_interface |
Opis |
empty C++20 |
Sprawdź, czy widok jest pusty. |
front C++20 |
Pobierz pierwszy element. |
operator bool C++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 split_view
1) split_view() requires default_initializable<V> && default_initializable<Pattern> = default;
2) constexpr 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 split_view(R&& rg, range_value_t<R> e);
Parametry
e
Pojedynczy element określający, gdzie należy podzielić widok. Element nie jest częścią widoku wynikowego.
base
Widok bazowy.
pattern
Widok elementów, które identyfikują, gdzie należy podzielić widok. Widok elementów nie jest częścią widoku wynikowego.
rg
Zakres do podzielenia.
Aby uzyskać informacje o typach parametrów szablonu, zobacz Parametry szablonu.
Wartość zwracana
split_view
Wystąpienie, które zawiera co najmniej jedną podgrupę.
Uwagi
Najlepszym sposobem utworzenia elementu split_view
jest użycie adaptera views::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 konstrukcję domyślną split_view
. Widok podstawowy i pattern
są konstruowane domyślnie. base()
Zwraca kopię elementu V()
.
2) Utwórz element split_view
, dzieląc widok przy użyciu sekwencji ograniczników.
3) Utwórz element split_view
, dzieląc widok przy użyciu jednego ogranicznika.
Przykład: 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
{
for (auto& i : splitRange)
{
std::cout << i << " "; // 1 1 4 5 6
}
}
}
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();
Parametry
Brak.
Wartość zwracana
Iterator wskazujący pierwszy element w widoku.
end
Pobierz element sentinel na końcu widoku.
constexpr auto end();
Parametry
Brak.
Wartość zwracana
Sentinel, który jest zgodny z ostatnim elementem w widoku:
Zobacz też
<ranges>
split_view
adapter zakresu
Klasa lazy_split_view
klasy widoków