From cppreference.com
valarray<T>apply(Tfunc(T))const;valarray<T>apply(Tfunc(constT&))const;Returns a new valarray of the same size with values which are acquired by applying function func to the previous values of the elements.
Parameters
func - function to apply to the values Return value
The resulting valarray with values acquired by applying function func.
Notes
The function can be implemented with the return type different from
. In this case, the replacement type has the following properties:
All const member functions of
are provided.
,
,
,
and
can be constructed from the replacement type.
For every function taking a conststd::valarray<T>&except
and
(since C++11), identical functions taking the replacement types shall be added;
For every function taking two conststd::valarray<T>& arguments, identical functions taking every combination of conststd::valarray<T>& and replacement types shall be added.
The return type does not add more than two levels of template nesting over the most deeply-nested argument type.
Possible implementation
Following straightforward implementations can be replaced by expression templates for a higher efficiency.
template<classT>valarray<T>valarray<T>::apply(Tfunc(T))const{valarray<T>other=*this;for(T&i:other)i=func(i);returnother;}template<classT>valarray<T>valarray<T>::apply(Tfunc(constT&))const{valarray<T>other=*this;for(T&i:other)i=func(i);returnother;}Example
Calculates and prints the first 10 factorials.
Run this code
#include<cmath>#include<iostream>#include<valarray>intmain(){std::valarray<int>v={1,2,3,4,5,6,7,8,9,10};v=v.apply([](intn)->int{returnstd::round(std::tgamma(n+1));});for(auton:v)std::cout<<n<<' ';std::cout<<'\n';}Output:
1 2 6 24 120 720 5040 40320 362880 3628800 See also