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 |