public member function
<valarray>

std::valarray::apply

valarray apply (T func(T)) const;valarray apply (T func(const T&)) const;
Apply function
Returns a valarray with each of its elements initialized to the result of applying func to its corresponding element in *this.

The valarray returned has the same length as *this.

Parameters

func
Pointer to a function taking an argument of type T (or a constant reference) and returning T.
T is the template argument of valarray (the value type).

Return value

A valarray object with the results of applying func to all the elements of *this.

Example

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// valarray::apply example
#include <iostream>     // std::cout
#include <cstddef>      // std::size_t
#include <valarray>     // std::valarray

int increment (int x) {return ++x;}

int main ()
{
  int init[]={10,20,30,40,50};
  std::valarray<int> foo (init,5);

  std::valarray<int> bar = foo.apply(increment);

  std::cout << "foo contains:";
  for (std::size_t n=0; n<bar.size(); n++)
	  std::cout << ' ' << bar[n];
  std::cout << '\n';

  return 0;
}

Output:

11 21 31 41 51


Complexity

Depends on library implementation (operations may be parallelized).

Iterator validity

No changes: Valid iterators, references and sub-arrays keep their validity.

Data races

Both the valarray and its elements are accessed.

Exception safety

If any operation performed on the elements throws an exception, it causes undefined behavior.
If the function fails to allocate storage it may throw an exception (such as bad_alloc), although this is not mandated.

See also