Partager via


split_view classe (bibliothèque standard C++)

Fractionne une vue en sous-plages en fonction d’un délimiteur. Le délimiteur peut être un élément unique ou une vue d’éléments. Le délimiteur ne fait pas partie du résultat split_view.

Une vue associée est la lazy_split_view classe. Les principales différences entre split_view et lazy_split_view sont les suivantes :

Afficher Peut fractionner une const plage type de plage
split_view non Prend en charge forward_range ou version ultérieure.
lazy_split_view Oui Prend en charge input_range ou version ultérieure.

Préférez split_view parce qu’il est plus efficace, sauf si vous devez fractionner une plage qui est 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>>;

Paramètres de modèle

Pattern
Type de la vue qui spécifie la séquence de délimiteur.

V
Type de la vue sous-jacente.

Afficher les caractéristiques

Pour obtenir une description des entrées suivantes, consultez les caractéristiques de classe View

Caractéristique Description
Adaptateur de plage views::split
Plage sous-jacente Identique à la plage sous-jacente
Type d’élément range_reference_t<V>
Afficher la catégorie d’itérateur Satisfait forward_range
Taille Non
Est const-itérable Non
Plage commune Uniquement si la plage sous-jacente satisfait common_range
Plage empruntée Non

Membres

Fonctions membres Description
Constructeurs Construisez la vue.
baseC++20 Obtenez la plage sous-jacente.
beginC++20 Obtenez un itérateur au premier élément.
endC++20 Obtenez la sentinelle à la fin de la vue.
Hérité de view_interface Description
emptyC++20 Testez si la vue est vide.
frontC++20 Obtenez le premier élément.
operator boolC++20 Testez si la vue n’est pas vide.

Spécifications

En-tête : <ranges> (depuis C++20)

Espace de noms : std::ranges

Option du compilateur : /std:c++20 ou version ultérieure est requise.

Constructeurs

Construire une instance d’un 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);

Paramètres

e
Élément unique qui identifie où fractionner la vue. L’élément ne fait pas partie de la vue résultante.

base
Vue sous-jacente.

pattern
Vue des éléments qui identifient où fractionner la vue. La vue des éléments ne fait pas partie de la vue résultante.

rg
Plage à fractionner.

Pour plus d’informations sur les types de paramètres de modèle, consultez Paramètres de modèle.

Valeur retournée

Instance split_view qui contient une ou plusieurs sous-plages.

Notes

La meilleure façon de créer un split_view est d’utiliser l’adaptateur views::split de plage. Les adaptateurs de plage sont la méthode prévue pour créer des classes d’affichage. Les types d’affichage sont exposés uniquement si vous souhaitez créer votre propre type d’affichage personnalisé.

1) Créez un split_view élément construit par défaut. La vue sous-jacente et pattern sont construites par défaut. base() retourne une copie de V().
2) Créez un split_view en fractionnant la vue à l’aide d’une séquence de délimiteurs.
3) Créez un split_view en fractionnant la vue à l’aide d’un seul délimiteur.

Exemple 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

Obtient une copie de la vue sous-jacente.

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

Paramètres

Aucune.

Retours

Vue sous-jacente.

begin

Obtenez un itérateur sur le premier élément de la vue.

constexpr auto begin();

Paramètres

Aucune.

Valeur retournée

Itérateur pointant vers le premier élément de la vue.

Image d’un vecteur avec les éléments 10, 20 et 30. Le premier élément contient 10 et est étiqueté begin(). Le dernier élément contient 30 et est intitulé « dernier élément ». Une zone imaginaire après le dernier élément indique la sentinelle et est étiquetée end().

end

Obtenez la sentinelle à la fin de la vue.

constexpr auto end();

Paramètres

Aucune.

Valeur retournée

Sentinel qui suit le dernier élément de la vue :

Image d’un vecteur avec les éléments 10, 20 et 30. Le premier élément contient 10 et est étiqueté begin(). Le dernier élément contient 30 et est intitulé « dernier élément ». Une zone imaginaire après le dernier élément indique la sentinelle et est étiquetée end().

Voir aussi

<ranges>
split_view adaptateur de plage
lazy_split_view, classe
afficher les classes