std::valarray<T>::apply
Von de.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 Anwenden der Funktion func auf die vorherigen Werte der Elemente.
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 von std::valarray abweichenden Rückgabetyp implementiert werden. In diesem Fall hat der Ersatztyp die folgenden Eigenschaften:
- Alle
constMemberfunktionen von std::valarray werden bereitgestellt. - std::valarray, std::slice_array, std::gslice_array, std::mask_array und std::indirect_array können aus dem Ersatztyp konstruiert werden.
- Für jede Funktion, die einen
const std::valarray<T>&entgegennimmt, mit Ausnahme von begin() und end()(seit C++11), werden identische Funktionen, die die Ersatztypen entgegennehmen, hinzugefügt; - Für jede Funktion, die zwei
const std::valarray<T>&Argumente entgegennimmt, werden identische Funktionen hinzugefügt, die jede Kombination vonconst std::valarray<T>&und Ersatztypen entgegennehmen. - Der Rückgabetyp fügt nicht mehr als zwei Ebenen der Templateschachtelung über dem am tiefsten geschachtelten Argumenttyp hinzu.
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.
Code ausführen
#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 aus einem Bereich (Funktionsschablone & Algorithmus-Funktionsobjekt) | |
(C++20) |
|
(C++20) |
wendet ein unäres Funktionsobjekt auf Elemente aus einem Bereich (Algorithmus-Funktionsobjekt) |