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. |
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. |
size C++20 |
Obtenez le nombre d’éléments. La plage sous-jacente doit satisfaire sized_range . |
Hérité de view_interface |
Description |
back C++20 |
Obtenez le dernier élément. |
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. |
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 func
de 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.
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 :
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.