Parallelized version of existing algorithms (parallelism TS)
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
istrue
, and - has the same semantics as the corresponding existing algorithm in the C++ standard library, except as noted in the page on parallel 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, |
std::all_of |
template
<
class ExecutionPolicy, class InputIt, class UnaryPred >
bool any_of( ExecutionPolicy&& policy, InputIt first, InputIt last, |
std::any_of |
template
<
class ExecutionPolicy, class InputIt, class UnaryPred >
bool none_of( ExecutionPolicy&& policy, InputIt first, InputIt last, |
std::none_of |
template
<
class ExecutionPolicy, class InputIt, class T >
typename iterator_traits<InputIt>
::
difference_type
|
std::count |
template
<
class ExecutionPolicy, class InputIt, class UnaryPred >
typename iterator_traits<InputIt>
::
difference_type
|
std::count_if |
template
<
class ExecutionPolicy, class InputIt1, class InputIt2 >
std::pair
<InputIt1,InputIt2>
|
std::mismatch |
template
<
class ExecutionPolicy, class InputIt1, class InputIt2 >
bool equal( ExecutionPolicy&& policy, |
std::equal |
template
<
class ExecutionPolicy, class InputIt, class T >
InputIt find( ExecutionPolicy&& policy, InputIt first, InputIt last, |
std::find |
template
<
class ExecutionPolicy, class InputIt, class UnaryPred >
InputIt find_if( ExecutionPolicy&& policy, InputIt first, InputIt last, |
std::find_if |
template
<
class ExecutionPolicy, class InputIt, class UnaryPred >
InputIt find_if_not( ExecutionPolicy&& policy, |
std::find_if_not |
template
<
class ExecutionPolicy, class ForwardIt1, class ForwardIt2 >
ForwardIt1 find_end( ExecutionPolicy&& policy, |
std::find_end |
template
<
class ExecutionPolicy, class InputIt, class ForwardIt >
InputIt find_first_of( ExecutionPolicy&& policy, |
std::find_first_of |
template
<
class ExecutionPolicy, class ForwardIt >
ForwardIt adjacent_find( ExecutionPolicy&& policy, |
std::adjacent_find |
template
<
class ExecutionPolicy, class ForwardIt1, class ForwardIt2 >
ForwardIt1 search( ExecutionPolicy&& policy, |
std::search |
template
<
class ExecutionPolicy, class ForwardIt, class Size, class T >
ForwardIt search_n( ExecutionPolicy&& policy, |
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, |
std::copy |
template
<
class ExecutionPolicy, class InputIt,
class OutputIt, class UnaryPred >
|
std::copy_if |
template
<
class ExecutionPolicy, class InputIt,
class Size, class OutputIt >
|
std::copy_n |
template
<
class ExecutionPolicy, class InputIt, class OutputIt >
OutputIt move( ExecutionPolicy&& policy, InputIt first, InputIt last, |
std::move |
template
<
class ExecutionPolicy, class ForwardIt, class T >
void fill( ExecutionPolicy&& policy, ForwardIt first, ForwardIt last, |
std::fill |
template
<
class ExecutionPolicy, class OutputIt, class Size, class T >
OutputIt fill_n( ExecutionPolicy&& policy, OutputIt first, Size count, |
std::fill_n |
template
<
class ExecutionPolicy, class InputIt,
class OutputIt, class UnaryOp >
|
std::transform |
template
<
class ExecutionPolicy, class ForwardIt, class Generator >
void generate( ExecutionPolicy&& policy, ForwardIt first, ForwardIt last, |
std::generate |
template
<
class ExecutionPolicy, class OutputIt,
class Size, class Generator >
|
std::generate_n |
template
<
class ExecutionPolicy, class ForwardIt, class T >
ForwardIt remove( ExecutionPolicy&& policy, |
std::remove |
template
<
class ExecutionPolicy, class ForwardIt, class UnaryPred >
ForwardIt remove_if( ExecutionPolicy&& policy, |
std::remove_if |
template
<
class ExecutionPolicy, class InputIt, class OutputIt, class T >
OutputIt remove_copy( ExecutionPolicy&& policy, |
std::remove_copy |
template
<
class ExecutionPolicy, class InputIt,
class OutputIt, class UnaryPred >
|
std::remove_copy_if |
template
<
class ExecutionPolicy, class ForwardIt, class T >
void replace( ExecutionPolicy&& policy, |
std::replace |
template
<
class ExecutionPolicy, class ForwardIt,
class UnaryPred, class T >
|
std::replace_if |
template
<
class ExecutionPolicy, class InputIt, class OutputIt, class T >
OutputIt replace_copy( ExecutionPolicy&& policy, |
std::replace_copy |
template
<
class ExecutionPolicy, class InputIt, class OutputIt,
class UnaryPred, class T >
|
std::replace_copy_if |
template
<
class ExecutionPolicy, class ForwardIt1, class ForwardIt2 >
ForwardIt2 swap_ranges( ExecutionPolicy&& policy, |
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, |
std::reverse_copy |
template
<
class ExecutionPolicy, class ForwardIt >
ForwardIt rotate( ExecutionPolicy&& policy, |
std::rotate |
template
<
class ExecutionPolicy, class ForwardIt, class OutputIt >
OutputIt rotate_copy( ExecutionPolicy&& policy, |
std::rotate_copy |
template
<
class ExecutionPolicy, class ForwardIt >
ForwardIt unique( ExecutionPolicy&& policy, |
std::unique |
template
<
class ExecutionPolicy, class InputIt, class OutputIt >
OutputIt unique_copy( ExecutionPolicy&& policy, |
std::unique_copy |
Partitioning operations | |
Parallelized algorithm | Existing algorithm |
template
<
class ExecutionPolicy, class InputIt, class UnaryPred >
bool is_partitioned( ExecutionPolicy&& policy, |
std::is_partitioned |
template
<
class ExecutionPolicy, class ForwardIt, class UnaryPred >
ForwardIt partition( ExecutionPolicy&& policy, |
std::partition |
template
<
class ExecutionPolicy, class InputIt, class OutputIt1,
class OutputIt2, class UnaryPred >
|
std::partition_copy |
template
<
class ExecutionPolicy, class BidirIt, class UnaryPred >
BidirIt stable_partition( ExecutionPolicy&& policy, |
std::stable_partition |
Sorting operations | |
Parallelized algorithm | Existing algorithm |
template
<
class ExecutionPolicy, class ForwardIt >
bool is_sorted( ExecutionPolicy&& policy, |
std::is_sorted |
template
<
class ExecutionPolicy, class ForwardIt >
ForwardIt is_sorted_until( ExecutionPolicy&& policy, |
std::is_sorted_until |
template
<
class ExecutionPolicy, class RandomIt >
void sort( ExecutionPolicy&& policy, RandomIt first, RandomIt last )
;
|
std::sort |
template
<
class ExecutionPolicy, class RandomIt >
void partial_sort( ExecutionPolicy&& policy, |
std::partial_sort |
template
<
class ExecutionPolicy, class InputIt, class RandomIt >
RandomIt partial_sort_copy( ExecutionPolicy&& policy, |
std::partial_sort_copy |
template
<
class ExecutionPolicy, class RandomIt >
void stable_sort( ExecutionPolicy&& policy, |
std::stable_sort |
template
<
class ExecutionPolicy, class RandomIt >
void nth_element( ExecutionPolicy&& policy, |
std::nth_element |
Set operations (on sorted ranges) | |
Parallelized algorithm | Existing algorithm |
template
<
class ExecutionPolicy, class InputIt1,
class InputIt2, class OutputIt >
|
std::merge |
template
<
class ExecutionPolicy, class BidirIt >
void inplace_merge( ExecutionPolicy&& policy, |
std::inplace_merge |
template
<
class ExecutionPolicy, class InputIt1, class InputIt2 >
bool includes( ExecutionPolicy&& policy, |
std::includes |
template
<
class ExecutionPolicy, class InputIt1,
class InputIt2, class OutputIt >
|
std::set_difference |
template
<
class ExecutionPolicy, class InputIt1,
class InputIt2, class OutputIt >
|
std::set_intersection |
template
<
class ExecutionPolicy, class InputIt1,
class InputIt2, class OutputIt >
|
std::set_symmetric_difference |
template
<
class ExecutionPolicy, class InputIt1,
class InputIt2, class OutputIt >
|
std::set_union |
Heap operations | |
Parallelized algorithm | Existing algorithm |
template
<
class ExecutionPolicy, class RandomIt >
bool is_heap( ExecutionPolicy&& policy, |
std::is_heap |
template
<
class ExecutionPolicy, class RandomIt >
RandomIt is_heap_until( ExecutionPolicy&& policy, |
std::is_heap_until |
Minimum/maximum operations | |
Parallelized algorithm | Existing algorithm |
template
<
class ExecutionPolicy, class ForwardIt >
ForwardIt max_element( ExecutionPolicy&& policy, |
std::max_element |
template
<
class ExecutionPolicy, class ForwardIt >
ForwardIt min_element( ExecutionPolicy&& policy, |
std::min_element |
template
<
class ExecutionPolicy, class ForwardIt >
std::pair
<ForwardIt,ForwardIt>
|
std::minmax_element |
template
<
class ExecutionPolicy, class InputIt1, class InputIt2 >
bool lexicographical_compare( ExecutionPolicy&& policy, |
std::lexicographical_compare |
Numeric operations | |
Parallelized algorithm | Existing algorithm |
template
<
class ExecutionPolicy, class InputIt, class OutputIt >
OutputIt adjacent_difference( ExecutionPolicy&& policy, |
std::adjacent_difference |
template
<
class ExecutionPolicy, class InputIt1,
class InputIt2, class T >
|
std::inner_product |
Operations on uninitialized memory | |
Parallelized algorithm | Existing algorithm |
template
<
class ExecutionPolicy, class InputIt, class ForwardIt >
ForwardIt uninitialized_copy( ExecutionPolicy&& policy, |
std::uninitialized_copy |
template
<
class ExecutionPolicy, class InputIt,
class Size, class ForwardIt >
|
std::uninitialized_copy_n |
template
<
class ExecutionPolicy, class ForwardIt, class T >
void uninitialized_fill( ExecutionPolicy&& policy, |
std::uninitialized_fill |
template
<
class ExecutionPolicy, class ForwardIt, class Size, class T >
ForwardIt uninitialized_fill_n( ExecutionPolicy&& policy, |
std::uninitialized_fill_n |