Parallelized version of existing algorithms (parallelism TS)
| 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 |
| Execution policies | ||||
| Parallel algorithms | ||||
| Parallel exceptions | ||||
| Parallelized version of existing algorithms | ||||
| New algorithms | ||||
|
|
Merged into ISO C++ The functionality described on this page was merged into the mainline ISO C++ standard as of 3/2016; see the algorithm library (since C++17) |
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::parallelnamespace, - does not participate in overload resolution unless
is_execution_policy<std::decay_t<ExecutionPolicy>>::valueistrue, 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 | |