std::valarray<T>:: apply
From cppreference.net
|
valarray
<
T
>
apply
(
T func
(
T
)
)
const
;
|
||
|
valarray
<
T
>
apply
(
T func
(
const
T
&
)
)
const
;
|
||
Retorna un nuevo valarray del mismo tamaño con valores que se obtienen aplicando la función
func
a los valores previos de los elementos.
Contenidos |
Parámetros
| func | - | función a aplicar a los valores |
Valor de retorno
El valarray resultante con valores adquiridos aplicando la función
func
.
Notas
La función puede implementarse con un tipo de retorno diferente de std::valarray . En este caso, el tipo de reemplazo tiene las siguientes propiedades:
-
- Se proporcionan todas las funciones miembro const de std::valarray .
- std::valarray , std::slice_array , std::gslice_array , std::mask_array y std::indirect_array pueden construirse a partir del tipo de reemplazo.
- Para cada función que toma un const std:: valarray < T > & excepto begin() y end() (desde C++11) , se añadirán funciones idénticas que tomen los tipos de reemplazo;
- Para cada función que toma dos argumentos const std:: valarray < T > & , se añadirán funciones idénticas que tomen cada combinación de const std:: valarray < T > & y tipos de reemplazo.
- El tipo de retorno no añade más de dos niveles de anidamiento de plantillas sobre el tipo de argumento más profundamente anidado.
Implementación posible
Las siguientes implementaciones sencillas pueden ser reemplazadas por plantillas de expresión para una mayor eficiencia.
template<class T> valarray<T> valarray<T>::apply(T func(T)) const { valarray<T> other = *this; for (T& i : other) i = func(i); return other; } template<class T> valarray<T> valarray<T>::apply(T func(const T&)) const { valarray<T> other = *this; for (T& i : other) i = func(i); return other; } |
Ejemplo
Calcula e imprime los primeros 10 factoriales.
Ejecutar este código
#include <cmath> #include <iostream> #include <valarray> int main() { std::valarray<int> v = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; v = v.apply([](int n) -> int { return std::round(std::tgamma(n + 1)); }); for (auto n : v) std::cout << n << ' '; std::cout << '\n'; }
Salida:
1 2 6 24 120 720 5040 40320 362880 3628800
Véase también
|
aplica un
function object
unario a elementos de un
range
(plantilla de función) |
|
|
(C++20)
|
aplica un
function object
unario a elementos de un
range
(objeto función de algoritmo) |