Namespaces
Variants

std::ranges:: views:: lazy_split, std::ranges:: lazy_split_view

From cppreference.net
Ranges library
Range adaptors
Défini dans l'en-tête <ranges>
template < ranges:: input_range V, ranges:: forward_range Pattern >

requires ranges:: view < V > &&
ranges:: view < Pattern > &&
std:: indirectly_comparable < ranges:: iterator_t < V > ,
ranges:: iterator_t < Pattern > ,
ranges:: equal_to > &&
( ranges:: forward_range < V > || /*tiny-range*/ < Pattern > )
class lazy_split_view

: public ranges:: view_interface < lazy_split_view < V, Pattern >>
(1) (depuis C++20)
namespace views {

inline constexpr /* non spécifié */ lazy_split = /* non spécifié */ ;

}
(2) (depuis C++20)
Signature d'appel
template < ranges:: viewable_range R, class Pattern >

requires /* voir ci-dessous */

constexpr ranges:: view auto lazy_split ( R && r, Pattern && pattern ) ;
(depuis C++20)
template < class Pattern >
constexpr /* adaptateur de plage de fermeture */ lazy_split ( Pattern && pattern ) ;
(depuis C++20)
Concepts auxiliaires
template < class R >

concept /*tiny-range*/ =
ranges:: sized_range < R > &&
requires { /* is-statically-constexpr-sized */ < R > ; } &&

( std:: remove_reference_t < R > :: size ( ) <= 1 ) ;
(3) ( exposition uniquement* )
1) lazy_split_view prend une view et un délimiteur, et divise la view en sous-intervalles sur le délimiteur.

Deux scénarios majeurs sont pris en charge :

2) Un RangeAdaptorObject . L'expression views :: lazy_split ( e, f ) est équivalente en expression à lazy_split_view ( e, f ) .
3) Le concept d'exposition uniquement /*tiny-range*/ < Pattern > est satisfait si Pattern satisfait sized_range , Pattern :: size ( ) est une expression constante et appropriée comme argument de constante de modèle, et la valeur de Pattern :: size ( ) est inférieure ou égale à 1 . Notamment, empty_view et single_view satisfont ce concept.

lazy_split_view modélise les concepts forward_range et input_range lorsque la view sous-jacente V modélise les concepts respectifs, et modélise common_range lorsque V modélise à la fois forward_range et common_range .

La plage interne ( ranges:: range_reference_t < lazy_split_view > ) modélise les concepts forward_range et input_range lorsque la view sous-jacente V modélise les concepts respectifs. Elle ne modélise pas common_range et ne peut pas être utilisée avec les algorithmes qui attendent une bidirectional_range ou supérieure.

Contrairement à split_view , lazy_split_view ne maintient pas la continuité du sous-intervalle.

Table des matières

Membres de données

Membre Description
V base_ (privé) la vue sous-jacente view
( objet membre d'exposition uniquement* )
Pattern pattern_ (privé) le motif utilisé comme délimiteur pour diviser la view sous-jacente
( objet membre d'exposition uniquement* )
non-propagating-cache < ranges:: iterator_t < V >> current_ (privé)
(présent uniquement si V ne satisfait pas forward_range )
un objet qui met en cache le résultat des appels à begin()
( objet membre d'exposition uniquement* )

Fonctions membres

construit un lazy_split_view
(fonction membre publique)
retourne une copie de la vue sous-jacente (adaptée)
(fonction membre publique)
retourne un itérateur vers le début
(fonction membre publique)
retourne un itérateur ou un sentinelle vers la fin
(fonction membre publique)
Hérité de std::ranges::view_interface
indique si la vue dérivée est vide, fourni uniquement si elle satisfait sized_range ou forward_range
(fonction membre publique de std::ranges::view_interface<D> )
(C++23)
retourne un itérateur constant vers le début de la plage
(fonction membre publique de std::ranges::view_interface<D> )
(C++23)
retourne un sentinelle pour l'itérateur constant de la plage
(fonction membre publique de std::ranges::view_interface<D> )
indique si la vue dérivée n'est pas vide, fourni uniquement si ranges::empty lui est applicable
(fonction membre publique de std::ranges::view_interface<D> )
retourne le premier élément de la vue dérivée, fourni si elle satisfait forward_range
(fonction membre publique de std::ranges::view_interface<D> )

Classes imbriquées

le type d'itérateur
( classe membre de modèle à usage d'exposition uniquement* )
le type d'itérateur de la plage interne
( classe membre de modèle à usage d'exposition uniquement* )

Guides de déduction

Notes

Le nom lazy_split_view est introduit par le rapport de défaut post-C++20 P2210R2 . Il possède le même mécanisme de paresse que l'ancien split_view avant la modification.

Exemple

#include <algorithm>
#include <iostream>
#include <ranges>
#include <string_view>
auto print = [](auto const& view)
{
    // `view` est de type std::views::lazy_split_view::__outer_iterator::value_type
    for (std::cout << "{ "; const auto element : view)
        std::cout << element << ' ';
    std::cout << "} ";
};
int main()
{
    constexpr static auto source = {0, 1, 0, 2, 3, 0, 4, 5, 6, 0, 7, 8, 9};
    constexpr int delimiter{0};
    constexpr std::ranges::lazy_split_view outer_view{source, delimiter};
    std::cout << "splits[" << std::ranges::distance(outer_view) << "]:  ";
    for (auto const& inner_view: outer_view)
        print(inner_view);
    constexpr std::string_view hello{"Hello C++ 20 !"};
    std::cout << "\n" "substrings: ";
    std::ranges::for_each(hello | std::views::lazy_split(' '), print);
    constexpr std::string_view text{"Hello-+-C++-+-20-+-!"};
    constexpr std::string_view delim{"-+-"};
    std::cout << "\n" "substrings: ";
    std::ranges::for_each(text | std::views::lazy_split(delim), print);
}

Sortie :

splits[5]:  { } { 1 } { 2 3 } { 4 5 6 } { 7 8 9 }
substrings: { H e l l o } { C + + } { 2 0 } { ! }
substrings: { H e l l o } { C + + } { 2 0 } { ! }

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Applicable à Comportement publié Comportement corrigé
P2210R2 C++20 l'ancien split_view était trop paresseux pour être facilement utilisé déplace ses fonctionnalités vers lazy_split_view

Voir aussi

une view sur les sous-intervalles obtenus en divisant une autre view en utilisant un délimiteur
(modèle de classe) (objet adaptateur de plage)
une view constituée de la séquence obtenue en aplatissant une view de range s
(modèle de classe) (objet adaptateur de plage)