Condividi tramite


split_view classe (libreria standard C++)

Suddivide una visualizzazione in intervalli secondari in base a un delimitatore. Il delimitatore può essere un singolo elemento o una visualizzazione di elementi. Il delimitatore non fa parte dell'oggetto risultante split_view.

Una visualizzazione correlata è la lazy_split_view classe . Le principali differenze tra split_view e lazy_split_view sono:

Visualizza Può dividere un const intervallo tipo di intervallo
split_view no Supporta forward_range o versione successiva.
lazy_split_view yes Supporta input_range o versione successiva.

Preferisce split_view perché è più efficiente, a meno che non sia necessario dividere un intervallo che sia const.

Sintassi

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

Parametri del modello

Pattern
Tipo della vista che specifica la sequenza di delimitatori.

V
Tipo della vista sottostante.

Visualizzare le caratteristiche

Per una descrizione delle voci seguenti, vedere Visualizzare le caratteristiche della classe

Caratteristica Descrizione
Adattatore di intervallo views::split
Intervallo sottostante Uguale all'intervallo sottostante
Tipo di elemento range_reference_t<V>
Visualizzare la categoria iteratore Soddisfa forward_range
Dimensioni No
Iterabile const No
Intervallo comune Solo se l'intervallo sottostante soddisfa common_range
Intervallo preso in prestito No

Membri

Funzioni membro Descrizione
Costruttori Costruisci la vista.
baseC++20 Ottenere l'intervallo sottostante.
beginC++20 Ottenere un iteratore al primo elemento.
endC++20 Ottenere l'sentinel alla fine della visualizzazione.
Ereditato da view_interface Descrizione
emptyC++20 Verificare se la visualizzazione è vuota.
frontC++20 Ottenere il primo elemento.
operator boolC++20 Verificare se la visualizzazione non è vuota.

Requisiti

Intestazione: <ranges> (da C++20)

Spazio dei nomi: std::ranges

Opzione del compilatore: /std:c++20 o versione successiva è obbligatoria.

Costruttori

Costruire un'istanza di un oggetto 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);

Parametri

e
Singolo elemento che identifica dove dividere la visualizzazione. L'elemento non fa parte della visualizzazione risultante.

base
Visualizzazione sottostante.

pattern
Visualizzazione degli elementi che identificano dove dividere la visualizzazione. La visualizzazione degli elementi non fa parte della visualizzazione risultante.

rg
Intervallo da dividere.

Per informazioni sui tipi di parametri del modello, vedere Parametri del modello.

Valore restituito

split_view Istanza che contiene uno o più intervalli secondari.

Osservazioni:

Il modo migliore per creare un split_view oggetto consiste nell'usare l'adattatore views::split di intervallo. Gli adattatori di intervallo sono il modo previsto per creare classi di visualizzazione. I tipi di visualizzazione vengono esposti solo nel caso in cui si voglia creare un tipo di visualizzazione personalizzato.

1) Creare un split_view oggetto costruito per impostazione predefinita. La vista sottostante e pattern sono costruite per impostazione predefinita. base() restituisce una copia di V().
2) Creare un split_view oggetto suddividendo la vista usando una sequenza di delimitatori.
3) Creare un split_view oggetto suddividendo la vista usando un singolo delimitatore.

Esempiosplit_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

Ottiene una copia della visualizzazione sottostante.

// 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() &&;

Parametri

Nessuna.

Valori restituiti

Visualizzazione sottostante.

begin

Ottiene un iteratore al primo elemento nella visualizzazione.

constexpr auto begin();

Parametri

Nessuna.

Valore restituito

Iteratore che punta al primo elemento della visualizzazione.

Immagine di un vettore con gli elementi 10, 20 e 30. Il primo elemento contiene 10 ed è etichettato begin(). L'ultimo elemento contiene 30 e viene etichettato come 'ultimo elemento'. Una casella immaginaria dopo l'ultimo elemento indica la sentinella ed è etichettata end().

end

Ottenere l'sentinel alla fine della visualizzazione.

constexpr auto end();

Parametri

Nessuna.

Valore restituito

Sentinel che segue l'ultimo elemento nella visualizzazione:

Immagine di un vettore con gli elementi 10, 20 e 30. Il primo elemento contiene 10 ed è etichettato begin(). L'ultimo elemento contiene 30 e viene etichettato come 'ultimo elemento'. Una casella immaginaria dopo l'ultimo elemento indica la sentinella ed è etichettata end().

Vedi anche

<ranges>
split_view adattatore di intervallo
Classe lazy_split_view
classi di visualizzazione