Partager via


take_while_view classe (bibliothèque standard C++)

Vue qui contient les éléments principaux d’une plage qui correspondent à un prédicat.

Syntaxe

template<view V, class Pred> requires
  input_range<V> && is_object_v<Pred> &&
  indirect_unary_predicate<const Pred, iterator_t<V>>
class take_while_view : public view_interface<take_while_view<V, Pred>>;

Paramètres de modèle

Pred
Type du prédicat qui détermine les éléments de début à placer dans la vue.

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::take_while
Plage sous-jacente Doit satisfaire input_range ou supérieur
Type d’élément Identique à la plage sous-jacente
Afficher la catégorie d’itérateur Identique à la plage sous-jacente
Taille Non
Est const-itérable Uniquement si la plage sous-jacente est const itérable et que le prédicat peut fonctionner avec des const références.
Plage commune Non
Plage empruntée Non

Membres

Fonctions membres Description
Constructeurs C++20 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.
predC++20 Obtenez une référence au prédicat qui détermine les éléments à prendre.
Hérité de view_interface Description
backC++20 Obtenez le dernier élément.
dataC++20 Obtenez un pointeur vers le premier élément.
emptyC++20 Testez si la vue est vide.
frontC++20 Obtenez le premier élément.
operator[]C++20 Obtenez l’élément à la position spécifiée.
operator boolC++20 Testez si la vue n’est pas vide.
size Obtenez le nombre d’éléments dans la vue.

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 take_while_view

1) take_while_view() requires 
    default_initializable<V> &&
    default_initializable<Pred> = default;

2) constexpr take_while_view(V base, Pred pred);

Paramètres

base
Vue sous-jacente.

pred
Prédicat qui détermine les éléments de début à placer dans la vue.

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

Valeur retournée

Objet take_while_view.

Notes

La meilleure façon de créer un take_while_view est d’utiliser l’adaptateur views::take_while 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 au cas où vous souhaitez créer votre propre type d’affichage personnalisé.

1) Déplace les constructions take_while_view à partir d’une base vue et d’un pred prédicat. Les deux base et pred sont déplacés via std::move().
2) Construit un objet vide take_while_view. La vue et le prédicat sous-jacents sont construits par défaut.

Exemple : take_while_view

// requires /std:c++20 or later
#include <ranges>
#include <iostream>
#include <vector>

int main()
{
    std::vector<int> v{0, 1, 2, 3, -4, 5, 6};
    auto twv = std::views::take_while(v, [](int i) {return i >= 0; });
    
    for (auto& e : twv)
    {
        std::cout << e << ' '; // 0 1 2 3
    }
    std::cout << '\n';

    // Using the '|' operator to create a take_view
    for (auto i : v | std::views::take_while([](int i) {return i < 5; }))
    {
        std::cout << i << ' '; // 0 1 2 3 -4
    }
}
0 1 2 3
0 1 2 3 -4

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

Copie de la vue sous-jacente.

begin

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

1) constexpr auto begin() requires (!Simple_view<V>);
2) constexpr auto begin() const requires
        range<const V> && 
        indirect_unary_predicate<const Pred, iterator_t<const V>>

Paramètres

Aucune.

Valeur retournée

Itérateur pointant vers le premier élément de la vue. Le comportement n’est pas défini si la vue n’a pas de prédicat.

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().

Notes

Pour 1, l’exigence Simple_view signifie qu’une vue V et const V possède le même itérateur et les mêmes types de sentinelles.

end

Obtenez la sentinelle à la fin de la vue.

1) constexpr auto end() requires (!Simple_view<V>);
2) constexpr auto end() const requires
        range<const V> &&
        indirect_unary_predicate<const Pred, iterator_t<const V>

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().

Notes

Pour 1, l’exigence Simple_view signifie qu’une vue V et const V possède le même itérateur et les mêmes types de sentinelles.

pred

Obtenez une référence au prédicat utilisé pour sélectionner les éléments de début qui vont se trouver dans la vue.

constexpr const Pred& pred() const;

Valeur retournée

Référence au prédicat utilisé pour sélectionner les éléments de début à placer dans la vue.

Exemple pred

// requires /std:c++20 or later
#include <ranges>
#include <iostream>
#include <vector>

int main()
{
    std::vector<int> v{ 0, 1, 2, 3, -4, 5, 6 };
    auto mv = v | std::views::take_while(
        [](int i) {return i < 5; });
    std::cout << std::boolalpha << mv.pred()(v[6]); // outputs false because v[6] = 6 and 6 is not less than 5 (the predicate)
}

Voir aussi

<ranges>
take_view
take_while adaptateur de plage
afficher les classes