Namespaces
Variants
Views
Actions

Parallelized version of existing algorithms (parallelism TS)

From cppreference.com
< cpp‎ | experimental‎ | parallelism
Revision as of 15:42, 28 July 2015 by T. Canens (Talk | contribs)

 
 
Experimental
Technical Specification
Filesystem library (filesystem TS)
Library fundamentals (library fundamentals TS)
Library fundamentals 2 (library fundamentals TS v2)
Library fundamentals 3 (library fundamentals TS v3)
Extensions for parallelism (parallelism TS)
Extensions for parallelism 2 (parallelism TS v2)
Extensions for concurrency (concurrency TS)
Extensions for concurrency 2 (concurrency TS v2)
Concepts (concepts TS)
Ranges (ranges TS)
Reflection (reflection TS)
Mathematical special functions (special functions TR)
Experimental Non-TS
Pattern Matching
Linear Algebra
std::execution
Contracts
2D Graphics
 
 

The C++ Extensions for Parallelism TS provides parallelized versions of the following 69 existing algorithms. Each of the following parallelized algorithms

  • is declared in the std::experimental::parallel namespace,
  • does not participate in overload resolution unless is_execution_policy<std::decay_t<ExecutionPolicy>>::value is true, and
  • has the same semantics as the corresponding existing algorithm.

Contents

Non-modifying sequence operations
Parallelized algorithm Existing algorithm
template< class ExecutionPolicy, class InputIt, class UnaryPred >

bool all_of( ExecutionPolicy&& policy, InputIt first,
             InputIt last, UnaryPred p );

std::all_of
template< class ExecutionPolicy, class InputIt, class UnaryPred >

bool any_of( ExecutionPolicy&& policy, InputIt first,
             InputIt last, UnaryPred p );

std::any_of
template< class ExecutionPolicy, class InputIt, class UnaryPred >

bool none_of( ExecutionPolicy&& policy, InputIt first,
              InputIt last, UnaryPred p );

std::none_of
template< class ExecutionPolicy, class InputIt, class T >

typename iterator_traits<InputIt>::difference_type
    count( ExecutionPolicy&& policy, InputIt first,
           InputIt last, const T &value );

std::count
template< class ExecutionPolicy, class InputIt, class UnaryPred >

typename iterator_traits<InputIt>::difference_type
    count_if( ExecutionPolicy&& policy, InputIt first,
              InputIt last, UnaryPred p );

std::count_if
template< class ExecutionPolicy, class InputIt1, class InputIt2 >

std::pair<InputIt1,InputIt2>
    mismatch( ExecutionPolicy&& policy,
              InputIt1 first1, InputIt1 last1, InputIt2 first2 );

template< class ExecutionPolicy, class InputIt1,
          class InputIt2, class BinaryPred >
std::pair<InputIt1,InputIt2>
    mismatch( ExecutionPolicy&& policy,
              InputIt1 first1, InputIt1 last1,
              InputIt2 first2, BinaryPred p );

template< class ExecutionPolicy, class InputIt1, class InputIt2 >
std::pair<InputIt1,InputIt2>
    mismatch( ExecutionPolicy&& policy,
              InputIt1 first1, InputIt1 last1,
              InputIt2 first2, InputIt2 last2 );

template< class ExecutionPolicy, class InputIt1,
          class InputIt2, class BinaryPred >
std::pair<InputIt1,InputIt2>
    mismatch( ExecutionPolicy&& policy,
              InputIt1 first1, InputIt1 last1,
              InputIt2 first2, InputIt2 last2, BinaryPred p );

std::mismatch
template< class ExecutionPolicy, class InputIt1, class InputIt2 >

bool equal( ExecutionPolicy&& policy,
            InputIt1 first1, InputIt1 last1, InputIt2 first2 );

template< class ExecutionPolicy, class InputIt1,
          class InputIt2, class BinaryPred >
bool equal( ExecutionPolicy&& policy,
            InputIt1 first1, InputIt1 last1,
            InputIt2 first2, BinaryPred p );

template< class ExecutionPolicy, class InputIt1, class InputIt2 >
bool equal( ExecutionPolicy&& policy,
            InputIt1 first1, InputIt1 last1,
            InputIt2 first2, InputIt2 last2 );

template< class ExecutionPolicy, class InputIt1,
          class InputIt2, class BinaryPred >
bool equal( ExecutionPolicy&& policy,
            InputIt1 first1, InputIt1 last1,
            InputIt2 first2, InputIt2 last2, BinaryPred p );

std::equal
template< class ExecutionPolicy, class InputIt, class T >

InputIt find( ExecutionPolicy&& policy,
              InputIt first, InputIt last,
              const T& value );

std::find
template< class ExecutionPolicy, class InputIt, class UnaryPred >

InputIt find_if( ExecutionPolicy&& policy,
                 InputIt first, InputIt last,
                 UnaryPred p );

std::find_if
template< class ExecutionPolicy, class InputIt, class UnaryPred >

InputIt find_if_not( ExecutionPolicy&& policy,
                     InputIt first, InputIt last,
                     UnaryPred p );

std::find_if_not
template< class ExecutionPolicy, class ForwardIt1, class ForwardIt2 >

ForwardIt1 find_end( ExecutionPolicy&& policy,
                     ForwardIt1 first, ForwardIt1 last,
                     ForwardIt2 s_first, ForwardIt2 s_last );
       
template< class ExecutionPolicy, class ForwardIt1,
          class ForwardIt2, class BinaryPred >
ForwardIt1 find_end( ExecutionPolicy&& policy,
                     ForwardIt1 first, ForwardIt1 last,
                     ForwardIt2 s_first, ForwardIt2 s_last,
                     BinaryPred p );

std::find_end
template< class ExecutionPolicy, class InputIt, class ForwardIt >

InputIt find_first_of( ExecutionPolicy&& policy,
                       InputIt first, InputIt last,
                       ForwardIt s_first, ForwardIt s_last );

template< class ExecutionPolicy, class InputIt,
          class ForwardIt, class BinaryPred >
InputIt find_first_of( ExecutionPolicy&& policy,
                       InputIt first, InputIt last,
                       ForwardIt s_first, ForwardIt s_last,
                       BinaryPred p );

std::find_first_of
template< class ExecutionPolicy, class ForwardIt >

ForwardIt adjacent_find( ExecutionPolicy&& policy,
                         ForwardIt first, ForwardIt last );
       
template< class ExecutionPolicy, class ForwardIt, class BinaryPred>
ForwardIt adjacent_find( ExecutionPolicy&& policy,
                         ForwardIt first, ForwardIt last,
                         BinaryPred p );

std::adjacent_find
template< class ExecutionPolicy, class ForwardIt1, class ForwardIt2 >

ForwardIt1 search( ExecutionPolicy&& policy,
                   ForwardIt1 first, ForwardIt1 last,
                   ForwardIt2 s_first, ForwardIt2 s_last );

template< class ExecutionPolicy, class ForwardIt1,
          class ForwardIt2, class BinaryPred >
ForwardIt1 search( ExecutionPolicy&& policy,
                   ForwardIt1 first, ForwardIt1 last,
                   ForwardIt2 s_first, ForwardIt2 s_last,
                   BinaryPred p );

std::search
template< class ExecutionPolicy, class ForwardIt,

          class Size, class T >
ForwardIt search_n( ExecutionPolicy&& policy,
                    ForwardIt first, ForwardIt last,
                    Size count, const T& value );
       
template< class ExecutionPolicy, class ForwardIt,
          class Size, class T, class BinaryPred >
ForwardIt search_n( ExecutionPolicy&& policy,
                    ForwardIt first, ForwardIt last,
                    Size count, const T& value,
                    BinaryPred p );

std::search_n
Modifying sequence operations
Parallelized algorithm Existing algorithm
template< class ExecutionPolicy, class InputIt, class OutputIt >

OutputIt copy( ExecutionPolicy&& policy,
               InputIt first, InputIt last, OutputIt d_first );

std::copy
template< class ExecutionPolicy, class InputIt,

          class OutputIt, class UnaryPred >
OutputIt copy_if( ExecutionPolicy&& policy,
                  InputIt first, InputIt last,
                  OutputIt d_first, UnaryPred pred );

std::copy_if
template< class ExecutionPolicy, class InputIt,

          class Size, class OutputIt >
OutputIt copy_n( ExecutionPolicy&& policy, InputIt first,
                 Size count, OutputIt result );

std::copy_n
template< class ExecutionPolicy, class InputIt, class OutputIt >

OutputIt move( ExecutionPolicy&& policy,
               InputIt first, InputIt last, OutputIt d_first );

std::move
template< class ExecutionPolicy, class ForwardIt, class T >

void fill( ExecutionPolicy&& policy,
           ForwardIt first, ForwardIt last, const T& value );

std::fill
template< class ExecutionPolicy, class OutputIt,

          class Size, class T >
OutputIt fill_n( ExecutionPolicy&& policy,
                 OutputIt first, Size count, const T& value );

std::fill_n
template< class ExecutionPolicy, class InputIt,

          class OutputIt, class UnaryOp >
OutputIt transform( ExecutionPolicy&& policy,
                    InputIt first1, InputIt last1,
                    OutputIt d_first, UnaryOp unary_op );

template< class ExecutionPolicy, class InputIt1, class InputIt2,
          class OutputIt, class BinaryOp >
OutputIt transform( ExecutionPolicy&& policy,
                    InputIt1 first1, InputIt1 last1,
                    InputIt2 first2, OutputIt d_first,
                    BinaryOp binary_op );

std::transform
template< class ExecutionPolicy, class ForwardIt, class Generator >

void generate( ExecutionPolicy&& policy,
               ForwardIt first, ForwardIt last, Generator g );

std::generate
template< class ExecutionPolicy, class OutputIt,

          class Size, class Generator >
OutputIt generate_n( ExecutionPolicy&& policy,
                     OutputIt first, Size count, Generator g );

std::generate_n
template< class ExecutionPolicy, class ForwardIt, class T >

ForwardIt remove( ExecutionPolicy&& policy,
                  ForwardIt first, ForwardIt last, const T& value );

std::remove
template< class ExecutionPolicy, class ForwardIt, class UnaryPred >

ForwardIt remove_if( ExecutionPolicy&& policy,
                     ForwardIt first, ForwardIt last, UnaryPred p );

std::remove_if
template< class ExecutionPolicy, class InputIt,

          class OutputIt, class T >
OutputIt remove_copy( ExecutionPolicy&& policy,
                      InputIt first, InputIt last,
                      OutputIt d_first, const T& value );

std::remove_copy
template< class ExecutionPolicy, class InputIt,

          class OutputIt, class UnaryPred >
OutputIt remove_copy_if( ExecutionPolicy&& policy,
                         InputIt first, InputIt last,
                         OutputIt d_first, UnaryPred p );

std::remove_copy_if
template< class ExecutionPolicy, class ForwardIt, class T >

void replace( ExecutionPolicy&& policy,
              ForwardIt first, ForwardIt last,
              const T& old_value, const T& new_value );

std::replace
template< class ExecutionPolicy, class ForwardIt,

          class UnaryPred, class T >
void replace_if( ExecutionPolicy&& policy,
                 ForwardIt first, ForwardIt last,
                 UnaryPred p, const T& new_value );

std::replace_if
template< class ExecutionPolicy, class InputIt,

          class OutputIt, class T >
OutputIt replace_copy( ExecutionPolicy&& policy,
                       InputIt first, InputIt last, OutputIt d_first,
                       const T& old_value, const T& new_value );

std::replace_copy
template< class ExecutionPolicy, class InputIt, class OutputIt,

          class UnaryPred, class T >
OutputIt replace_copy_if( ExecutionPolicy&& policy,
                          InputIt first, InputIt last, OutputIt d_first,
                          UnaryPred p, const T& new_value );

std::replace_copy_if
template< class ExecutionPolicy, class ForwardIt1, class ForwardIt2 >

ForwardIt2 swap_ranges( ExecutionPolicy&& policy,
                        ForwardIt1 first1, ForwardIt1 last1,
                        ForwardIt2 first2 );

std::swap_ranges
template< class ExecutionPolicy, class BidirIt >

void reverse( ExecutionPolicy&& policy, BidirIt first, BidirIt last );

std::reverse
template< class ExecutionPolicy, class BidirIt, class OutputIt >

OutputIt reverse_copy( ExecutionPolicy&& policy,
                       BidirIt first, BidirIt last, OutputIt d_first );

std::reverse_copy
template< class ExecutionPolicy, class ForwardIt >

ForwardIt rotate( ExecutionPolicy&& policy,
                  ForwardIt first, ForwardIt n_first, ForwardIt last );

std::rotate
template< class ExecutionPolicy, class ForwardIt, class OutputIt >

OutputIt rotate_copy( ExecutionPolicy&& policy,
                      ForwardIt first, ForwardIt n_first,
                      ForwardIt last, OutputIt d_first );

std::rotate_copy
template< class ExecutionPolicy, class ForwardIt >

ForwardIt unique( ExecutionPolicy&& policy,
                  ForwardIt first, ForwardIt last );

template< class ExecutionPolicy, class ForwardIt, class BinaryPred >
ForwardIt unique( ExecutionPolicy&& policy,
                  ForwardIt first, ForwardIt last, BinaryPred p );

std::unique
template< class ExecutionPolicy, class InputIt, class OutputIt >

OutputIt unique_copy( ExecutionPolicy&& policy,
                      InputIt first, InputIt last,
                      OutputIt d_first );

template< class ExecutionPolicy, class InputIt,
          class OutputIt, class BinaryPred >
OutputIt unique_copy( ExecutionPolicy&& policy,
                      InputIt first, InputIt last,
                      OutputIt d_first, BinaryPred p );

std::unique_copy
Partitioning operations
Parallelized algorithm Existing algorithm
template< class ExecutionPolicy, class InputIt, class UnaryPred >

bool is_partitioned( ExecutionPolicy&& policy,
                     InputIt first, InputIt last, UnaryPred p );

std::is_partitioned
template< class ExecutionPolicy, class ForwardIt, class UnaryPred >

ForwardIt partition( ExecutionPolicy&& policy,
                     ForwardIt first, ForwardIt last, UnaryPred p );

std::partition
template< class ExecutionPolicy, class InputIt, class OutputIt1,

          class OutputIt2, class UnaryPred >
std::pair<OutputIt1, OutputIt2>
     partition_copy( ExecutionPolicy&& policy,
                     InputIt first, InputIt last,
                     OutputIt1 d_first_true, OutputIt2 d_first_false,
                     UnaryPred p );

std::partition_copy
template< class ExecutionPolicy, class BidirIt, class UnaryPred >

BidirIt stable_partition( ExecutionPolicy&& policy,
                          BidirIt first, BidirIt last, UnaryPred p );

std::stable_partition
Sorting operations
Parallelized algorithm Existing algorithm
template< class ExecutionPolicy, class ForwardIt >

bool is_sorted( ExecutionPolicy&& policy,
                ForwardIt first, ForwardIt last );

template< class ExecutionPolicy, class ForwardIt, class Compare >
bool is_sorted( ExecutionPolicy&& policy,
                ForwardIt first, ForwardIt last, Compare comp );

std::is_sorted
template< class ExecutionPolicy, class ForwardIt >

ForwardIt is_sorted_until( ExecutionPolicy&& policy,
                           ForwardIt first, ForwardIt last );

template< class ExecutionPolicy, class ForwardIt, class Compare >
ForwardIt is_sorted_until( ExecutionPolicy&& policy,
                           ForwardIt first, ForwardIt last,
                           Compare comp );

std::is_sorted_until
template< class ExecutionPolicy, class RandomIt >

void sort( ExecutionPolicy&& policy, RandomIt first, RandomIt last );

template< class ExecutionPolicy, class RandomIt, class Compare >
void sort( ExecutionPolicy&& policy,
           RandomIt first, RandomIt last, Compare comp );

std::sort
template< class ExecutionPolicy, class RandomIt >

void partial_sort( ExecutionPolicy&& policy,
                   RandomIt first, RandomIt middle, RandomIt last );

template< class ExecutionPolicy, class RandomIt, class Compare >
void partial_sort( ExecutionPolicy&& policy,
                   RandomIt first, RandomIt middle, RandomIt last,
                   Compare comp );

std::partial_sort
template< class ExecutionPolicy, class InputIt, class RandomIt >

RandomIt partial_sort_copy( ExecutionPolicy&& policy,
                            InputIt first, InputIt last,
                            RandomIt d_first, RandomIt d_last );

template< class ExecutionPolicy, class InputIt,
          class RandomIt, class Compare >
RandomIt partial_sort_copy( ExecutionPolicy&& policy,
                            InputIt first, InputIt last,
                            RandomIt d_first, RandomIt d_last,
                            Compare comp );

std::partial_sort_copy
template< class ExecutionPolicy, class RandomIt >

void stable_sort( ExecutionPolicy&& policy,
                  RandomIt first, RandomIt last );

template< class ExecutionPolicy, class RandomIt, class Compare >
void stable_sort( ExecutionPolicy&& policy,
                  RandomIt first, RandomIt last, Compare comp );

std::stable_sort
template< class ExecutionPolicy, class RandomIt >

void nth_element( ExecutionPolicy&& policy,
                  RandomIt first, RandomIt nth, RandomIt last );

template< class ExecutionPolicy, class RandomIt, class Compare >
void nth_element( ExecutionPolicy&& policy,
                  RandomIt first, RandomIt nth, RandomIt last,
                  Compare comp );

std::nth_element
Set operations (on sorted ranges)
Parallelized algorithm Existing algorithm
template< class ExecutionPolicy, class InputIt1,

          class InputIt2, class OutputIt >
OutputIt merge( ExecutionPolicy&& policy,
                InputIt1 first1, InputIt1 last1,
                InputIt2 first2, InputIt2 last2,
                OutputIt d_first );

template< class ExecutionPolicy, class InputIt1, class InputIt2,
          class OutputIt, class Compare>
OutputIt merge( ExecutionPolicy&& policy,
                InputIt1 first1, InputIt1 last1,
                InputIt2 first2, InputIt2 last2,
                OutputIt d_first, Compare comp );

std::merge
template< class ExecutionPolicy, class BidirIt >

void inplace_merge( ExecutionPolicy&& policy,
                    BidirIt first, BidirIt middle, BidirIt last );

template< class ExecutionPolicy, class BidirIt, class Compare>
void inplace_merge( ExecutionPolicy&& policy,
                    BidirIt first, BidirIt middle, BidirIt last,
                    Compare comp );

std::inplace_merge
template< class ExecutionPolicy, class InputIt1, class InputIt2 >

bool includes( ExecutionPolicy&& policy,
               InputIt1 first1, InputIt1 last1,
               InputIt2 first2, InputIt2 last2 );

template< class ExecutionPolicy, class InputIt1,
          class InputIt2, class Compare >
bool includes( ExecutionPolicy&& policy,
               InputIt1 first1, InputIt1 last1,
               InputIt2 first2, InputIt2 last2, Compare comp );

std::includes
template< class ExecutionPolicy, class InputIt1,

          class InputIt2, class OutputIt >
OutputIt set_difference( ExecutionPolicy&& policy,
                         InputIt1 first1, InputIt1 last1,
                         InputIt2 first2, InputIt2 last2,
                         OutputIt d_first );

template< class ExecutionPolicy, class InputIt1, class InputIt2,
          class OutputIt, class Compare >
OutputIt set_difference( ExecutionPolicy&& policy,
                         InputIt1 first1, InputIt1 last1,
                         InputIt2 first2, InputIt2 last2,
                         OutputIt d_first, Compare comp );

std::set_difference
template< class ExecutionPolicy, class InputIt1,

          class InputIt2, class OutputIt >
OutputIt set_intersection( ExecutionPolicy&& policy,
                           InputIt1 first1, InputIt1 last1,
                           InputIt2 first2, InputIt2 last2,
                           OutputIt d_first );

template< class ExecutionPolicy, class InputIt1, class InputIt2,
          class OutputIt, class Compare >
OutputIt set_intersection( ExecutionPolicy&& policy,
                           InputIt1 first1, InputIt1 last1,
                           InputIt2 first2, InputIt2 last2,
                           OutputIt d_first, Compare comp );

std::set_intersection
template< class ExecutionPolicy, class InputIt1,

          class InputIt2, class OutputIt >
OutputIt set_symmetric_difference( ExecutionPolicy&& policy,
                                   InputIt1 first1, InputIt1 last1,
                                   InputIt2 first2, InputIt2 last2,
                                   OutputIt d_first );

template< class ExecutionPolicy, class InputIt1, class InputIt2,
          class OutputIt, class Compare >
OutputIt set_symmetric_difference( ExecutionPolicy&& policy,
                                   InputIt1 first1, InputIt1 last1,
                                   InputIt2 first2, InputIt2 last2,
                                   OutputIt d_first, Compare comp );

std::set_symmetric_difference
template< class ExecutionPolicy, class InputIt1,

          class InputIt2, class OutputIt >
OutputIt set_union( ExecutionPolicy&& policy,
                    InputIt1 first1, InputIt1 last1,
                    InputIt2 first2, InputIt2 last2,
                    OutputIt d_first );

template< class ExecutionPolicy, class InputIt1, class InputIt2,
          class OutputIt, class Compare >
OutputIt set_union( ExecutionPolicy&& policy,
                    InputIt1 first1, InputIt1 last1,
                    InputIt2 first2, InputIt2 last2,
                    OutputIt d_first, Compare comp );
(

std::set_union
Heap operations
Parallelized algorithm Existing algorithm
template< class ExecutionPolicy, class RandomIt >

bool is_heap( ExecutionPolicy&& policy,
              RandomIt first, RandomIt last );

template< class ExecutionPolicy, class RandomIt, class Compare >
bool is_heap( ExecutionPolicy&& policy,
              RandomIt first, RandomIt last,
              Compare comp );

std::is_heap
template< class ExecutionPolicy, class RandomIt >

RandomIt is_heap_until( ExecutionPolicy&& policy,
                        RandomIt first, RandomIt last );

template< class ExecutionPolicy, class RandomIt, class Compare >
RandomIt is_heap_until( ExecutionPolicy&& policy,
                        RandomIt first, RandomIt last,
                        Compare comp );

std::is_heap_until
Minimum/maximum operations
Parallelized algorithm Existing algorithm
template< class ExecutionPolicy, class ForwardIt >

ForwardIt max_element( ExecutionPolicy&& policy,
                       ForwardIt first, ForwardIt last);

template< class ExecutionPolicy, class ForwardIt, class Compare >
ForwardIt max_element( ExecutionPolicy&& policy,
                       ForwardIt first, ForwardIt last,
                       Compare cmp);

std::max_element
template< class ExecutionPolicy, class ForwardIt >

ForwardIt min_element( ExecutionPolicy&& policy,
                       ForwardIt first, ForwardIt last);

template< class ExecutionPolicy, class ForwardIt, class Compare >
ForwardIt min_element( ExecutionPolicy&& policy,
                       ForwardIt first, ForwardIt last,
                       Compare cmp);

std::min_element
template< class ExecutionPolicy, class ForwardIt >

std::pair<ForwardIt,ForwardIt>
    minmax_element( ExecutionPolicy&& policy,
                    ForwardIt first, ForwardIt last);

template< class ExecutionPolicy, class ForwardIt, class Compare >
std::pair<ForwardIt,ForwardIt>
    minmax_element( ExecutionPolicy&& policy,
                    ForwardIt first, ForwardIt last, Compare cmp);

std::minmax_element
template< class ExecutionPolicy, class InputIt1, class InputIt2 >

bool lexicographical_compare( ExecutionPolicy&& policy,
                              InputIt1 first1, InputIt1 last1,
                              InputIt2 first2, InputIt2 last2 );

template< class ExecutionPolicy, class InputIt1,
          class InputIt2, class Compare >
bool lexicographical_compare( ExecutionPolicy&& policy,
                              InputIt1 first1, InputIt1 last1,
                              InputIt2 first2, InputIt2 last2,
                              Compare comp );

std::lexicographical_compare
Numeric operations
Parallelized algorithm Existing algorithm
template< class ExecutionPolicy, class InputIt, class OutputIt >

OutputIt adjacent_difference( ExecutionPolicy&& policy,
                              InputIt first, InputIt last,
                              OutputIt d_first );

template< class ExecutionPolicy, class InputIt,
          class OutputIt, class BinaryOp >
OutputIt adjacent_difference( ExecutionPolicy&& policy,
                              InputIt first, InputIt last,
                              OutputIt d_first, BinaryOp op );

std::adjacent_difference
template< class ExecutionPolicy, class InputIt1,

          class InputIt2, class T >
T inner_product( ExecutionPolicy&& policy,
                 InputIt1 first1, InputIt1 last1,
                 InputIt2 first2, T value );

template< class ExecutionPolicy, class InputIt1,
          class InputIt2, class T,
          class BinaryOp1, class BinaryOp2>
T inner_product( ExecutionPolicy&& policy,
                 InputIt1 first1, InputIt1 last1,
                 InputIt2 first2, T value,
                 BinaryOp1 op1, BinaryOp2 op2 );

std::inner_product
Operations on uninitialized memory
Parallelized algorithm Existing algorithm
template< class ExecutionPolicy, class InputIt, class ForwardIt >

ForwardIt uninitialized_copy( ExecutionPolicy&& policy,
                              InputIt first, InputIt last,
                              ForwardIt d_first );

std::uninitialized_copy
template< class ExecutionPolicy, class InputIt,

          class Size, class ForwardIt >
ForwardIt uninitialized_copy_n( ExecutionPolicy&& policy,
                                InputIt first, Size count,
                                ForwardIt d_first);

std::uninitialized_copy_n
template< class ExecutionPolicy, class ForwardIt, class T >

void uninitialized_fill( ExecutionPolicy&& policy,
                         ForwardIt first, ForwardIt last,
                         const T& value );

std::uninitialized_fill
template< class ExecutionPolicy, class ForwardIt,

          class Size, class T >
ForwardIt uninitialized_fill_n( ExecutionPolicy&& policy,
                                ForwardIt first, Size count,
                                const T& value );

std::uninitialized_fill_n