The C++ Extensions for Parallelism TS provides parallelized versions of the following 69 existing algorithms. Each of the following parallelized algorithms
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
|