std::ranges::views::transform, std::ranges::transform_view
De es.cppreference.net
| 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*) | ||||
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) |
|
|
(C++26)
|
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
Ejecutar 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 ('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
|
(C++20)
|
aplica una función a un rango de elementos
(objeto función de algoritmo) |