std::valarray::apply - cppreference.com (original) (raw)

| valarray<T> apply( T func(T) ) const; | | | | --------------------------------------------- | | | | valarray<T> apply( T func(const T&) ) 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.

Contents

[edit] Parameters

func - function to apply to the values

[edit] Return value

The resulting valarray with values acquired by applying function func.

[edit] Notes

The function can be implemented with the return type different from std::valarray. In this case, the replacement type has the following properties:

[edit] Possible implementation

Following straightforward implementations can be replaced by expression templates for a higher efficiency.

template valarray valarray::apply(T func(T)) const { valarray other = *this; for (T& i : other) i = func(i); return other; }   template valarray valarray::apply(T func(const T&)) const { valarray other = *this; for (T& i : other) i = func(i); return other; }

[edit] Example

Calculates and prints the first 10 factorials.

#include #include #include   int main() { std::valarray 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'; }

Output:

1 2 6 24 120 720 5040 40320 362880 3628800

[edit] See also