std::valarray<T>:: apply
|
valarray
<
T
>
appliquer
(
T func
(
T
)
)
const
;
|
||
|
valarray
<
T
>
appliquer
(
T func
(
const
T
&
)
)
const
;
|
||
Retourne un nouveau valarray de même taille avec des valeurs acquises en appliquant la fonction
func
aux valeurs précédentes des éléments.
Table des matières |
Paramètres
| func | - | fonction à appliquer aux valeurs |
Valeur de retour
Le valarray résultant avec les valeurs acquises en appliquant la fonction
func
.
Notes
La fonction peut être implémentée avec un type de retour différent de std::valarray . Dans ce cas, le type de remplacement possède les propriétés suivantes :
-
- Toutes les fonctions membres const de std::valarray sont fournies.
- std::valarray , std::slice_array , std::gslice_array , std::mask_array et std::indirect_array peuvent être construits à partir du type de remplacement.
- Pour chaque fonction prenant un const std:: valarray < T > & sauf begin() et end() (depuis C++11) , des fonctions identiques prenant les types de remplacement doivent être ajoutées ;
- Pour chaque fonction prenant deux arguments const std:: valarray < T > & , des fonctions identiques prenant chaque combinaison de const std:: valarray < T > & et des types de remplacement doivent être ajoutées.
- Le type de retour n'ajoute pas plus de deux niveaux d'imbrication de templates par rapport au type d'argument le plus profondément imbriqué.
Implémentation possible
Les implémentations directes suivantes peuvent être remplacées par des expression templates pour une efficacité accrue.
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; } |
Exemple
Calcule et affiche les 10 premières factorielles.
#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'; }
Sortie :
1 2 6 24 120 720 5040 40320 362880 3628800
Voir aussi
|
applique un
objet fonction
unaire aux éléments d'un
intervalle
(modèle de fonction) |
|
|
(C++20)
|
applique un
objet fonction
unaire aux éléments d'un
intervalle
(objet fonction d'algorithme) |