| 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; seethe 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
std::experimental::parallel namespace,is_execution_policy<std::decay_t<ExecutionPolicy>>::value istrue, and
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 | |