Namespaces
Variants

std::valarray<T>:: apply

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

Gibt ein neues valarray derselben Größe zurück, dessen Werte durch Anwendung der Funktion func auf die vorherigen Werte der Elemente erzeugt wurden.

Inhaltsverzeichnis

Parameter

func - Funktion, die auf die Werte angewendet wird

Rückgabewert

Das resultierende valarray mit Werten, die durch Anwendung der Funktion func erworben wurden.

Hinweise

Die Funktion kann mit einem Rückgabetyp implementiert werden, der sich von std::valarray unterscheidet. In diesem Fall hat der Ersatztyp die folgenden Eigenschaften:

Mögliche Implementierung

Die folgenden einfachen Implementierungen können durch Expression Templates für eine höhere Effizienz ersetzt werden.

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;
}

Beispiel

Berechnet und gibt die ersten 10 Fakultäten aus.

#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';
}

Ausgabe:

1 2 6 24 120 720 5040 40320 362880 3628800

Siehe auch

wendet ein unäres Funktionsobjekt auf Elemente eines Bereichs an
(Funktions-Template)
wendet ein unäres Funktionsobjekt auf Elemente eines Bereichs an
(Algorithmus-Funktionsobjekt)