Namespaces
Variants

std::ranges::views::transform, std::ranges::transform_view

Depuis fr.cppreference.net
 
 
Bibliothèque de plages
Adaptateurs de plages
 
 
Défini dans l'en-tête <ranges>
template< ranges::input_range V,
          std::copy_constructible F >
    requires ranges::view<V> &&
             std::is_object_v<F> &&
             std::regular_invocable<F&, ranges::range_reference_t<V>> &&
             /* invoke_result_t<F&, range_reference_t<V>>& is a valid type */
class transform_view
    : public ranges::view_interface<transform_view<V, F>>
(1) (depuis C++20)
(jusqu'à C++23)
template< ranges::input_range V,
          std::move_constructible F >
    requires ranges::view<V> &&
             std::is_object_v<F> &&
             std::regular_invocable<F&, ranges::range_reference_t<V>> &&
             /* invoke_result_t<F&, range_reference_t<V>>& is a valid type */
class transform_view
    : public ranges::view_interface<transform_view<V, F>>
(depuis C++23)
namespace views {
    inline constexpr /*unspecified*/ transform = /*unspecified*/;
}
(2) (depuis C++20)
Signature d'appel
template< ranges::viewable_range R, class F >
    requires /* see below */
constexpr ranges::view auto transform( R&& r, F&& fun );
(depuis C++20)
template< class F >
constexpr /*range adaptor closure*/ transform( F&& fun );
(depuis C++20)
1) Un adaptateur de plage qui représente une view d'une séquence sous-jacente après avoir appliqué une fonction de transformation à chaque élément.
2) RangeAdaptorObject. L'expression views::transform(e, f) est équivalente à l'expression à transform_view(e, f) pour toutes sous-expressions appropriées e et f.

transform_view modélise les concepts random_access_range, bidirectional_range, forward_range, input_range, common_range, et sized_range lorsque la vue sous-jacente V modélise les concepts respectifs.

Membres de données

Membre Description
V base_ (privé) la vue sous-jacente
(objet membre d'exposition uniquement*)

copyable-box<F>

(jusqu'à C++23)

movable-box<F>

(depuis C++23)
fun_ (privé)
l'objet fonction sous-jacent
(objet membre d'exposition uniquement*)

Fonctions membres

construit un transform_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)
retourne le nombre d'éléments, fourni uniquement si la plage sous-jacente (adaptée) satisfait sized_range
(fonction membre publique)
retourne la taille approximative de la approximately_sized_range résultante
(fonction membre publique)
Hérité de 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 au 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 dans la vue dérivée, fourni si elle satisfait forward_range
(fonction membre publique de std::ranges::view_interface<D>)
retourne le dernier élément dans la vue dérivée, fourni uniquement si elle satisfait bidirectional_range et common_range
(fonction membre publique de std::ranges::view_interface<D>)
retourne le nième élément dans la vue dérivée, fourni uniquement si elle satisfait random_access_range
(fonction membre publique de std::ranges::view_interface<D>)

Guides de déduction

Classes imbriquées

le type d'itérateur
( classe membre de modèle d'exposition uniquement* )
le type de sentinelle
( classe membre de modèle d'exposition uniquement* )

Exemple

#include <algorithm>
#include <cstdio>
#include <iterator>
#include <ranges>
#include <string>
char rot13a(const char x, const char a)
{
    return a + (x - a + 13) % 26;
}
char rot13(const char x)
{
    if ('Z' >= x and x >= 'A')
        return rot13a(x, 'A');
    if ('z' >= x and x >= 'a')
        return rot13a(x, 'a');
    return x;
}
int main()
{
    auto show = [](const unsigned char x) { std::putchar(x); };
    std::string in{"fr.cppreference.net\n"};
    std::ranges::for_each(in, show);
    std::ranges::for_each(in | std::views::transform(rot13), show);
    std::string out;
    std::ranges::copy(std::views::transform(in, rot13), std::back_inserter(out));
    std::ranges::for_each(out, show);
    std::ranges::for_each(out | std::views::transform(rot13), show);
}

Sortie :

fr.cppreference.net
pccersrerapr.pbz
pccersrerapr.pbz
fr.cppreference.net

Voir aussi

applique une fonction à une plage d'éléments
(objet fonction algorithme)