std::ranges::views::transform, std::ranges::transform_view
De cppreference.com
<tbody>
</tbody>
| 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.
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.
Funciones miembro
(C++20) |
Construye un objeto transform_view (función miembro pública) |
(C++20) |
Devuelve una copia de la vista (adaptada) subyacente. (función miembro pública) |
(C++20) |
Devuelve un iterador al comienzo. (función miembro pública) |
(C++20) |
Devuelve un iterador o un centinela al final. (función miembro pública) |
(C++20) |
Devuelve el número de elementos. Se proporciona solo si el rango (adaptado) subyacente satisface sized_range . (función miembro pública) |
Heredadas de 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>)
|
(C++20) |
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>)
|
(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>)
|
(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>)
|
(C++20) |
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>)
|
Guías de deducción
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) |
Ejemplo
Ejecuta este código
#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
Véase también
(C++20) |
Aplica una función a un rango de elementos. (niebloid) |