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. |
base C++20 |
Obtenez la plage sous-jacente. |
begin C++20 |
Obtenez un itérateur au premier élément. |
end C++20 |
Obtenez la sentinelle à la fin de la vue. |
Hérité de view_interface |
Description |
empty C++20 |
Testez si la vue est vide. |
front C++20 |
Obtenez le premier élément. |
operator bool C++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.
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 :
Voir aussi
<ranges>
split_view
adaptateur de plage
lazy_split_view
, classe
afficher les classes