Espacios de nombres
Variantes
Acciones

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

De cppreference.com
< cpp‎ | ranges
 
 
Biblioteca de rangos
Adaptadores de rangos
 
 
Definido en el archivo de 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>>& es un tipo válido */

class transform_view : public ranges::view_interface<transform_view<V, F>>
(1) (desde C++20)
namespace views {

    inline constexpr /*no especificado*/ transform = /*no especificado*/;

}
(2) (desde C++20)
Signatura de la llamada
template< ranges::viewable_range R, class F >

    requires /* véase a continuación */

constexpr ranges::view auto transform( R&& r, F&& fun );
(desde C++20)
template< class F >
constexpr /*cierre de adaptador de rango*/ transform( F&& fun );
(desde C++20)
1) Un adaptador de rango que representa una vista (view) de una secuencia subyacente después de aplicar una función de transformación a cada elemento.
2) Objeto adaptador de rango. La expresión views::transform(e, f) es equivalente en expresión a transform_view(e, f) para cualquier subexpresión e y f adecuadas.

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.

Contenido

[editar] Equivalente en expresión

La expresión e es equivalente-en-expresión a la expresión f, si e y f tienen los mismos efectos, ambas potencialmente lanzan o ambas potencialmente no lanzan (es decir, noexcept (e) == noexcept(f)), y ambas son subexpresiones constantes o ambas no son subexpresiones constantes.

[editar] Funciones miembro

Construye un objeto transform_view
(función miembro pública) [editar]
(C++20)
Devuelve una copia de la vista (adaptada) subyacente.
(función miembro pública) [editar]
(C++20)
Devuelve un iterador al comienzo.
(función miembro pública) [editar]
(C++20)
Devuelve un iterador o un centinela al final.
(función miembro pública) [editar]
(C++20)
Devuelve el número de elementos. Se proporciona solo si el rango (adaptado) subyacente satisface sized_range .
(función miembro pública) [editar]
Heredadas de std::ranges::view_interface
(C++20)
Devuelve si la vista derivada está vacía o no. Se proporciona si la vista derivada satisface forward_range.
(función miembro pública de std::ranges::view_interface<D>) [editar]
Devuelve si la vista derivada está vacía o no. Se proporciona si ranges::empty le es aplicable.
(función miembro pública de std::ranges::view_interface<D>) [editar]
(C++20)
Devuelve el primer elemento en la vista derivada. Se proporciona si la vista derivada satisface forward_range.
(función miembro pública de std::ranges::view_interface<D>) [editar]
(C++20)
Devuelve el último elemento en una vista derivada. Se proporciona si la vista derivada satisface bidirectional_range y common_range.
(función miembro pública de std::ranges::view_interface<D>) [editar]
Devuelve el enésimo elemento en la vista derivada. Se proporciona si la vista derivada satisface random_access_range.
(función miembro pública de std::ranges::view_interface<D>) [editar]

[editar] Guías de deducción

[editar] Clases anidadas

(C++20)
El tipo iterador.
(plantilla de clase miembro de solo exposición)
(C++20)
El tipo centinela.
(plantilla de clase miembro de solo exposición)

[editar] 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 (x >= 'A' && x <= 'Z') {
        return rot13a(x, 'A');
    }
 
    if (x >= 'a' && x <= 'z') {
        return rot13a(x, 'a');
    }
 
    return x;
}
 
int main()
{
    auto show = [](const unsigned char x) { std::putchar(x); };
 
    std::string in{ "cppreference.com\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:

cppreference.com
pccersrerapr.pbz
pccersrerapr.pbz
cppreference.com

[editar] Véase también

Aplica una función a un rango de elementos.
(niebloid) [editar]