Namespaces
Variants
Views
Actions

Difference between revisions of "cpp/algorithm/ranges"

From cppreference.com
< cpp‎ | algorithm
(P1716R3 + equivalence_relation, indirect_binary_predicate, indirect_equivalence_relation - indirect_relation)
(P1243R4 for_each_n, sample, clamp)
Line 39: Line 39:
 
{{dsc inc | cpp/algorithm/ranges/dsc all_any_none_of}}
 
{{dsc inc | cpp/algorithm/ranges/dsc all_any_none_of}}
 
{{dsc inc | cpp/algorithm/ranges/dsc for_each}}
 
{{dsc inc | cpp/algorithm/ranges/dsc for_each}}
 +
{{dsc inc | cpp/algorithm/ranges/dsc for_each_n}}
 
{{dsc inc | cpp/algorithm/ranges/dsc count}}
 
{{dsc inc | cpp/algorithm/ranges/dsc count}}
 
{{dsc inc | cpp/algorithm/ranges/dsc mismatch}}
 
{{dsc inc | cpp/algorithm/ranges/dsc mismatch}}
Line 71: Line 72:
 
{{dsc inc | cpp/algorithm/ranges/dsc rotate_copy}}
 
{{dsc inc | cpp/algorithm/ranges/dsc rotate_copy}}
 
{{dsc inc | cpp/algorithm/ranges/dsc shuffle}}
 
{{dsc inc | cpp/algorithm/ranges/dsc shuffle}}
 +
{{dsc inc | cpp/algorithm/ranges/dsc sample}}
 
{{dsc inc | cpp/algorithm/ranges/dsc unique}}
 
{{dsc inc | cpp/algorithm/ranges/dsc unique}}
 
{{dsc inc | cpp/algorithm/ranges/dsc unique_copy}}
 
{{dsc inc | cpp/algorithm/ranges/dsc unique_copy}}
Line 120: Line 122:
 
{{dsc inc | cpp/algorithm/ranges/dsc minmax}}
 
{{dsc inc | cpp/algorithm/ranges/dsc minmax}}
 
{{dsc inc | cpp/algorithm/ranges/dsc minmax_element}}
 
{{dsc inc | cpp/algorithm/ranges/dsc minmax_element}}
 +
{{dsc inc | cpp/algorithm/ranges/dsc clamp}}
  
 
{{dsc h2 | Permutation operations}}
 
{{dsc h2 | Permutation operations}}

Revision as of 09:59, 18 June 2020

 
 
Algorithm library
Constrained algorithms and algorithms on ranges (C++20)
Constrained algorithms, e.g. ranges::copy, ranges::sort, ...
Execution policies (C++17)
Non-modifying sequence operations
Batch operations
(C++17)
Search operations
(C++11)                (C++11)(C++11)

Modifying sequence operations
Copy operations
(C++11)
(C++11)
Swap operations
Transformation operations
Generation operations
Removing operations
Order-changing operations
(until C++17)(C++11)
(C++20)(C++20)
Sampling operations
(C++17)

Sorting and related operations
Partitioning operations
Sorting operations
Binary search operations
(on partitioned ranges)
Set operations (on sorted ranges)
Merge operations (on sorted ranges)
Heap operations
Minimum/maximum operations
(C++11)
(C++17)
Lexicographical comparison operations
Permutation operations
C library
Numeric operations
Operations on uninitialized memory
 
Constrained algorithms
All names in this menu belong to namespace std::ranges
Non-modifying sequence operations
Modifying sequence operations
Partitioning operations
Sorting operations
Binary search operations (on sorted ranges)
       
       
Set operations (on sorted ranges)
Heap operations
Minimum/maximum operations
       
       
Permutation operations
Fold operations
Numeric operations
(C++23)            
Operations on uninitialized storage
Return types
 

C++20 provides constrained versions of most algorithms in the namespace std::ranges. In these algorithms, a range can be specified as either a iterator-sentinel pair or as a single [[cpp/unrecognized concept/Range|Range]] argument, and projections and pointer-to-member callables are supported. Additionally, the return type of most algorithms have been changed to return all potentially useful information computed during the execution of the algorithm.

Contents

Algorithm concepts and utilities

The header <iterator> provides a set of concepts and related utility templates designed to ease constraining common algorithm operations.

Defined in header <iterator>
Defined in namespace std
Indirect callable concepts
specifies that a callable type can be invoked with the result of dereferencing an indirectly_readable type
(concept) [edit]
specifies that a callable type, when invoked with the result of dereferencing an indirectly_readable type, satisfies predicate
(concept) [edit]
specifies that a callable type, when invoked with the result of dereferencing two indirectly_readable types, satisfies predicate
(concept) [edit]
specifies that a callable type, when invoked with the result of dereferencing two indirectly_readable types, satisfies equivalence_relation
(concept) [edit]
specifies that a callable type, when invoked with the result of dereferencing two indirectly_readable types, satisfies strict_weak_order
(concept) [edit]
Common algorithm requirements
specifies that values may be moved from an indirectly_readable type to an indirectly_writable type
(concept) [edit]
specifies that values may be moved from an indirectly_readable type to an indirectly_writable type and that the move may be performed via an intermediate object
(concept) [edit]
specifies that values may be copied from an indirectly_readable type to an indirectly_writable type
(concept) [edit]
specifies that values may be copied from an indirectly_readable type to an indirectly_writable type and that the copy may be performed via an intermediate object
(concept) [edit]
specifies that the values referenced by two indirectly_readable types can be swapped
(concept) [edit]
specifies that the values referenced by two indirectly_readable types can be compared
(concept) [edit]
specifies the common requirements of algorithms that reorder elements in place
(concept) [edit]
(C++20)
specifies the requirements of algorithms that merge sorted sequences into an output sequence by copying elements
(concept) [edit]
(C++20)
specifies the common requirements of algorithms that permute sequences into ordered sequences
(concept) [edit]
Utilities
computes the result of invoking a callable object on the result of dereferencing some set of indirectly_readable types
(alias template)[edit]
(C++20)
helper template for specifying the constraints on algorithms that accept projections
(class template) [edit]

Constrained algorithms

Defined in header <algorithm>
Defined in namespace std::ranges
Non-modifying sequence operations
checks if a predicate is true for all, any or none of the elements in a range
(niebloid)[edit]
applies a function to a range of elements
(niebloid)[edit]
applies a function object to the first N elements of a sequence
(niebloid)[edit]
returns the number of elements satisfying specific criteria
(niebloid)[edit]
finds the first position where two ranges differ
(niebloid)[edit]
determines if two sets of elements are the same
(niebloid)[edit]
returns true if one range is lexicographically less than another
(niebloid)[edit]
finds the first element satisfying specific criteria
(niebloid)[edit]
finds the last sequence of elements in a certain range
(niebloid)[edit]
searches for any one of a set of elements
(niebloid)[edit]
finds the first two adjacent items that are equal (or satisfy a given predicate)
(niebloid)[edit]
searches for the first occurrence of a range of elements
(niebloid)[edit]
searches for the first occurrence of a number consecutive copies of an element in a range
(niebloid)[edit]
Modifying sequence operations
copies a range of elements to a new location
(niebloid)[edit]
copies a number of elements to a new location
(niebloid)[edit]
copies a range of elements in backwards order
(niebloid)[edit]
moves a range of elements to a new location
(niebloid)[edit]
moves a range of elements to a new location in backwards order
(niebloid)[edit]
assigns a range of elements a certain value
(niebloid)[edit]
assigns a value to a number of elements
(niebloid)[edit]
applies a function to a range of elements
(niebloid)[edit]
saves the result of a function in a range
(niebloid)[edit]
saves the result of N applications of a function
(niebloid)[edit]
removes elements satisfying specific criteria
(niebloid)[edit]
copies a range of elements omitting those that satisfy specific criteria
(niebloid)[edit]
replaces all values satisfying specific criteria with another value
(niebloid)[edit]
copies a range, replacing elements satisfying specific criteria with another value
(niebloid)[edit]
swaps two ranges of elements
(niebloid)[edit]
reverses the order of elements in a range
(niebloid)[edit]
creates a copy of a range that is reversed
(niebloid)[edit]
rotates the order of elements in a range
(niebloid)[edit]
copies and rotate a range of elements
(niebloid)[edit]
randomly re-orders elements in a range
(niebloid)[edit]
selects N random elements from a sequence
(niebloid)[edit]
removes consecutive duplicate elements in a range
(niebloid)[edit]
creates a copy of some range of elements that contains no consecutive duplicates
(niebloid)[edit]
Partitioning operations
determines if the range is partitioned by the given predicate
(niebloid)[edit]
divides a range of elements into two groups
(niebloid)[edit]
copies a range dividing the elements into two groups
(niebloid)[edit]
divides elements into two groups while preserving their relative order
(niebloid)[edit]
locates the partition point of a partitioned range
(niebloid)[edit]
Sorting operations
checks whether a range is sorted into ascending order
(niebloid)[edit]
finds the largest sorted subrange
(niebloid)[edit]
sorts a range into ascending order
(niebloid)[edit]
sorts the first N elements of a range
(niebloid)[edit]
copies and partially sorts a range of elements
(niebloid)[edit]
sorts a range of elements while preserving order between equal elements
(niebloid)[edit]
partially sorts the given range making sure that it is partitioned by the given element
(niebloid)[edit]
Binary search operations (on sorted ranges)
returns an iterator to the first element not less than the given value
(niebloid)[edit]
returns an iterator to the first element greater than a certain value
(niebloid)[edit]
determines if an element exists in a partially-ordered range
(niebloid)[edit]
returns range of elements matching a specific key
(niebloid)[edit]
Set operations (on sorted ranges)
merges two sorted ranges
(niebloid)[edit]
merges two ordered ranges in-place
(niebloid)[edit]
returns true if one sequence is a subsequence of another
(niebloid)[edit]
computes the difference between two sets
(niebloid)[edit]
computes the intersection of two sets
(niebloid)[edit]
computes the symmetric difference between two sets
(niebloid)[edit]
computes the union of two sets
(niebloid)[edit]
Heap operations
checks if the given range is a max heap
(niebloid)[edit]
finds the largest subrange that is a max heap
(niebloid)[edit]
creates a max heap out of a range of elements
(niebloid)[edit]
adds an element to a max heap
(niebloid)[edit]
removes the largest element from a max heap
(niebloid)[edit]
turns a max heap into a range of elements sorted in ascending order
(niebloid)[edit]
Minimum/maximum operations
returns the greater of the given values
(niebloid)[edit]
returns the largest element in a range
(niebloid)[edit]
returns the smaller of the given values
(niebloid)[edit]
returns the smallest element in a range
(niebloid)[edit]
returns the smaller and larger of two elements
(niebloid)[edit]
returns the smallest and the largest elements in a range
(niebloid)[edit]
clamps a value between a pair of boundary values
(niebloid)[edit]
Permutation operations
determines if a sequence is a permutation of another sequence
(niebloid)[edit]
generates the next greater lexicographic permutation of a range of elements
(niebloid)[edit]
generates the next smaller lexicographic permutation of a range of elements
(niebloid)[edit]

Constrained uninitialized memory algorithms

Defined in header <memory>
Defined in namespace std::ranges
copies a range of objects to an uninitialized area of memory
(niebloid)[edit]
copies a number of objects to an uninitialized area of memory
(niebloid)[edit]
copies an object to an uninitialized area of memory, defined by a range
(niebloid)[edit]
copies an object to an uninitialized area of memory, defined by a start and a count
(niebloid)[edit]
moves a range of objects to an uninitialized area of memory
(niebloid)[edit]
moves a number of objects to an uninitialized area of memory
(niebloid)[edit]
constructs objects by default-initialization in an uninitialized area of memory, defined by a range
(niebloid)[edit]
constructs objects by default-initialization in an uninitialized area of memory, defined by a start and count
(niebloid)[edit]
constructs objects by value-initialization in an uninitialized area of memory, defined by a range
(niebloid)[edit]
constructs objects by value-initialization in an uninitialized area of memory, defined by a start and a count
(niebloid)[edit]
destroys an object at a given address
(niebloid)[edit]
destroys a range of objects
(niebloid)[edit]
destroys a number of objects in a range
(niebloid)[edit]