std::valarray<T>::apply (3) - Linux Manuals

std::valarray<T>::apply: std::valarray<T>::apply


std::valarray<T>::apply - std::valarray<T>::apply


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.


func - function to apply to the values

Return value

The resulting valarray with values acquired by applying function func.


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

      * All const member functions of std::valarray are provided.
      * std::valarray, std::slice_array, std::gslice_array, std::mask_array and std::indirect_array can be constructed from the replacement type.
      * All functions accepting an argument of type const std::valarray&
        except begin() and end()
        (since C++11) should also accept the replacement type.
      * All functions accepting two arguments of type const std::valarray& should accept every combination of const std::valarray& and the replacement type.
      * The return type does not add more than two levels of template nesting over the most deeply-nested argument type.


calculates and prints the first 10 factorials
// Run this code

  #include <iostream>
  #include <valarray>
  #include <cmath>

  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';


  1 2 6 24 120 720 5040 40320 362880 3628800

See also

         applies a function to a range of elements
for_each (function template)