Namespaces
Variants

std::valarray<T>::apply

De es.cppreference.net
 
 
 
 
valarray<T> apply( T func(T) ) const;
valarray<T> apply( T func(const T&) ) const;

Devuelve un nuevo valarray del mismo tamaño con valores que se obtienen aplicando la función func a los valores anteriores de los elementos.

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:

  • Todas las const funciones miembro de std::valarray se proporcionan.
  • 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 agregarán funciones idénticas que tomen los tipos de reemplazo;
  • Para cada función que toma dos const std::valarray<T>& argumentos, se agregarán funciones idénticas que tomen toda combinación de const std::valarray<T>& y tipos de reemplazo.
  • El tipo de retorno no agrega más de dos niveles de anidamiento de plantilla 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.

#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 objeto función unario a los elementos de un rango
(plantilla de función & objeto función de algoritmo)
aplica un objeto función unario a los elementos de un rango
(objeto función de algoritmo)