Partager via


transform_view classe (bibliothèque standard C++)

Vue des éléments, chacun d’eux étant une transformation d’un élément dans la plage spécifiée.

Syntaxe

template<input_range V, move_constructible F>
    requires view<V> && is_object_v<F> &&
    regular_invocable<F&, range_reference_t<V>> &&
    can-reference<invoke_result_t<F&, range_reference_t<V>>>
class transform_view : public view_interface<transform_view<V, F>>;

Paramètres de modèle

F
Type de l’objet de fonction qui transforme les éléments.

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::transform
Plage sous-jacente Doit satisfaire input_range ou supérieur
Type d’élément Identique au type de retour de la fonction de transformation.
Afficher la catégorie d’itérateur Prend en charge input_range jusqu’à random_access_range, en fonction de la plage sous-jacente
Taille Uniquement si la plage sous-jacente satisfait sized_range
Est const-itérable Uniquement si la plage sous-jacente est const itérable et que la transformation fonctionne sur const les références.
Plage commune Uniquement si la plage sous-jacente satisfait common_range
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.
sizeC++20 Obtenez le nombre d’éléments. La plage sous-jacente doit satisfaire sized_range.
Hérité de view_interface Description
backC++20 Obtenez le dernier élément.
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.
operator[]C++20 Obtenez l’élément à la position spécifiée.

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 transform_view

1) transform_view() requires default_initializable<V>
         && default_initializable<F> = default;
2) constexpr transform_view(V base, F func);

Paramètres

base
Vue sous-jacente.

func
Fonction qui transforme chaque élément.

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

Valeur retournée

Instance de transform_view.

Notes

La meilleure façon de créer un transform_view est d’utiliser l’adaptateur views::transform 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) Créez une valeur initialisée transform_view. La fonction de transformation et la vue sous-jacente doivent être initialisables par défaut.
2) Déplacer la transform_view construction à partir d’une vue et d’une base fonction funcde transformation . Les deux base et func sont déplacés via std::move().

Exemple : transform_view

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

using namespace std;
using namespace chrono;

void print(auto v)
{
    for (auto x : v)
    {
        cout << x << ' ';
    }
    cout << '\n';
}

struct classes
{
    string className;
    weekday startDay;
};

int main()
{
    std::vector<int> v{0, 1, 2, 3, -4, 5, 6};

    // outputs 0 2 4 6 -8 10 12
    print(v | std::views::transform([](int i) {return i * 2; }));

    // ---- Modify the elements in the collection by returning a reference to the element to transform

    std::vector<classes> theClasses = {
        {"Math", Monday},
        {"English", Wednesday},
        {"History", Monday},
        {"Science", Wednesday},
        {"Art", Friday},
        {"Music", Thursday}
    };

    // lambda to get a reference to the day of the week for a class
    auto getDay = [](classes& c) -> weekday&
    {
        return c.startDay;
    };

    // If a class starts on Monday, change it to Tuesday
    for (auto&& startDay : theClasses | std::views::transform(getDay))
    {
        // modify the startDay in the collection
        if (startDay == Monday)
        {
            startDay = Tuesday;
        }
    }

    // output classes and start times
    for (auto c : theClasses)
    {
        std::cout << c.className << " : " << c.startDay << '\n';
    }
}
0 2 4 6 -8 10 12
Math : Tue
English : Wed
History : Tue
Science : Wed
Art : Fri
Music : Thu

base

Obtenez l’affichage sous-jacent.

// Uses a copy constructor to return the underlying view
constexpr V base() const& requires std::copy_constructible<V>;

// Uses std::move() to return the underlying view
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();

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

end

Obtenez la sentinelle à la fin de la vue.

constexpr auto end()

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

size

Obtenez le nombre d’éléments dans la vue.

constexpr auto size() requires ranges::sized_range<V>;
constexpr auto size() const requires ranges::sized_range<const V>;

Paramètres

Aucune.

Valeur retournée

Nombre d’éléments dans la vue.

Voir aussi

<ranges>
filter adaptateur de plage
afficher les classes