Sdílet prostřednictvím


split_view class (standardní knihovna jazyka C++)

Rozdělí zobrazení na podrangely na základě oddělovače. Oddělovač může být jeden prvek nebo zobrazení prvků. Oddělovač není součástí výsledného split_viewznaku .

Související zobrazení je lazy_split_view třída. Mezi hlavními rozdíly mezi split_view a lazy_split_view mezi těmito jednotlivými hodnotami jsou:

Zobrazení Může rozdělit oblast.const typ rozsahu
split_view ne Podporuje forward_range nebo vyšší.
lazy_split_view ano Podporuje input_range nebo vyšší.

Preferujte split_view , protože je efektivnější, pokud není nutné rozdělit rozsah, který je const.

Syntaxe

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 šablony

Pattern
Typ zobrazení, který určuje sekvenci oddělovače.

V
Typ podkladového zobrazení.

Zobrazení charakteristik

Popis následujících položek naleznete v tématu Zobrazení vlastností třídy.

Charakteristika Popis
Adaptér rozsahu views::split
Podkladová oblast Stejné jako podkladová oblast
Typ elementu range_reference_t<V>
Zobrazit kategorii iterátoru Uspokojuje forward_range
Tříděný No
Je const-iterable No
Společný rozsah Pouze v případě, že základní rozsah splňuje požadavky common_range
Zapůjčený rozsah No

Členové

Členské funkce Popis
Konstruktory Vytvořte zobrazení.
baseC++20 Získejte podkladovou oblast.
beginC++20 Získejte iterátor k prvnímu prvku.
endC++20 Získejte sentinel na konci zobrazení.
Zděděno z view_interface Popis
emptyC++20 Otestujte, jestli je zobrazení prázdné.
frontC++20 Získejte první prvek.
operator boolC++20 Otestujte, jestli zobrazení není prázdné.

Požadavky

Hlavička: <ranges> (od C++20)

Obor názvů: std::ranges

Je vyžadována možnost kompilátoru: /std:c++20 nebo novější.

Konstruktory

Vytvoření instance objektu 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
Jeden prvek, který identifikuje, kde se má zobrazení rozdělit. Prvek není součástí výsledného zobrazení.

base
Podkladové zobrazení.

pattern
Zobrazení prvků, které identifikují, kde se má zobrazení rozdělit. Zobrazení prvků není součástí výsledného zobrazení.

rg
Oblast, která se má rozdělit.

Informace o typech parametrů šablony naleznete v tématu Parametry šablony.

Vrácená hodnota

Instance split_view , která obsahuje jednu nebo více poduspořádek.

Poznámky

Nejlepší způsob, jak vytvořit, split_view je použití adaptéru rozsahu views::split . Adaptéry rozsahu představují zamýšlený způsob vytváření tříd zobrazení. Typy zobrazení se zobrazí jenom v případě, že chcete vytvořit vlastní typ zobrazení.

1) Vytvořte vytvořený split_view výchozí objekt. Podkladové zobrazení a pattern jsou vytvořené jako výchozí. base()vrátí kopii .V()
2) Vytvořte split_view zobrazení rozdělením zobrazení pomocí posloupnosti oddělovačů.
3) Vytvořte split_view zobrazení rozdělením zobrazení pomocí jednoho oddělovače.

Příklad: 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

Získá kopii podkladového zobrazení.

// 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

Žádná

Návraty

Podkladové zobrazení.

begin

Získejte iterátor k prvnímu prvku v zobrazení.

constexpr auto begin();

Parametry

Žádná

Vrácená hodnota

Iterátor ukazující na první prvek v zobrazení.

Obrázek vektoru s prvky 10, 20 a 30 První prvek obsahuje hodnotu 10 a je označen jako begin(). Poslední prvek obsahuje hodnotu 30 a je označený jako

end

Získejte sentinel na konci zobrazení.

constexpr auto end();

Parametry

Žádná

Vrácená hodnota

Sentinel, který následuje za posledním prvkem v zobrazení:

Obrázek vektoru s prvky 10, 20 a 30 První prvek obsahuje hodnotu 10 a je označen jako begin(). Poslední prvek obsahuje hodnotu 30 a je označený jako

Viz také

<ranges>
split_view adaptér rozsahu
Třída lazy_split_view
zobrazit třídy