Udostępnij za pośrednictwem


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

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 constiterowalne Nie.
Wspólny zakres Tylko wtedy, gdy zakres bazowy spełnia common_range
Pożyczony zakres Nie.

Członkowie

Funkcje składowe Opis
Konstruktory Skonstruuj widok.
baseC++20 Pobierz zakres bazowy.
beginC++20 Pobierz iterator do pierwszego elementu.
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)

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

Powroty

Widok bazowy.

begin

Pobierz iterator do pierwszego elementu w widoku.

constexpr auto begin();

Parametry

Brak.

Wartość zwracana

Iterator wskazujący pierwszy element w widoku.

Picture of a vector with the elements 10, 20, and 30. The first element contains 10 and is labeled begin(). The last element contains 30 and is labeled 'last element'. An imaginary box after the last element indicates the sentinel and is labeled end().

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:

Picture of a vector with the elements 10, 20, and 30. The first element contains 10 and is labeled begin(). The last element contains 30 and is labeled 'last element'. An imaginary box after the last element indicates the sentinel and is labeled end().

Zobacz też

<ranges>
split_view adapter zakresu
Klasa lazy_split_view
klasy widoków