Namespaces
Variants

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

De es.cppreference.net
 
 
Biblioteca de rangos
Adaptadores de rangos
 
 
Definido en el encabezado <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) (desde C++20)
(hasta 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>>
(desde C++23)
namespace views {
    inline constexpr /*unspecified*/ transform = /*unspecified*/;
}
(2) (desde C++20)
Signatura de llamada
template< ranges::viewable_range R, class F >
    requires /* see below */
constexpr ranges::view auto transform( R&& r, F&& fun );
(desde C++20)
template< class F >
constexpr /*range adaptor closure*/ transform( F&& fun );
(desde C++20)
1) Un adaptador de rango que representa una view de una secuencia subyacente después de aplicar una función de transformación a cada elemento.
2) RangeAdaptorObject. La expresión views::transform(e, f) es equivalente a expresión a transform_view(e, f) para cualquier subexpresión apropiada e y f.

transform_view modela los conceptos random_access_range, bidirectional_range, forward_range, input_range, common_range y sized_range cuando la vista subyacente V modela los conceptos respectivos.

Miembros de datos

Miembro Descripción
V base_ (privado) la vista subyacente
(objeto miembro de solo exposición*)

copyable-box<F>

(hasta C++23)

movable-box<F>

(desde C++23)
fun_ (privado)
el objeto función subyacente
(objeto miembro de solo exposición*)

Funciones miembro

construye un transform_view
(función miembro pública)
devuelve una copia de la vista subyacente (adaptada)
(función miembro pública)
devuelve un iterador al inicio
(función miembro pública)
devuelve un iterador o un centinela al final
(función miembro pública)
devuelve el número de elementos, proporcionado solo si el rango subyacente (adaptado) satisface sized_range
(función miembro pública)
devuelve el tamaño aproximado del approximately_sized_range resultante
(función miembro pública)
Heredado de ranges::view_interface
devuelve si la vista derivada está vacía, solo si cumple sized_range o forward_range
(función miembro pública de std::ranges::view_interface<D>)
(C++23)
devuelve un iterador constante al inicio del rango
(función miembro pública de std::ranges::view_interface<D>)
(C++23)
devuelve un centinela para el iterador constante del rango
(función miembro pública de std::ranges::view_interface<D>)
devuelve si la vista derivada no está vacía, solo si ranges::empty es aplicable a ella
(función miembro pública de std::ranges::view_interface<D>)
devuelve el primer elemento en la vista derivada, solo si cumple forward_range
(función miembro pública de std::ranges::view_interface<D>)
devuelve el último elemento en la vista derivada, solo si cumple bidirectional_range y common_range
(función miembro pública de std::ranges::view_interface<D>)
devuelve el elemento nésimo en la vista derivada, solo si cumple random_access_range
(función miembro pública de std::ranges::view_interface<D>)

Guías de deducción

Clases anidadas

el tipo de iterador
( clase de plantilla miembro solo para exposición* )
el tipo de centinela
( clase de plantilla miembro solo para exposición* )

Ejemplo

#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{"es.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);
}

Salida:

es.cppreference.net
pccersrerapr.pbz
pccersrerapr.pbz
es.cppreference.net

Véase también

aplica una función a un rango de elementos
(objeto función de algoritmo)