Constrained algorithms and algorithms on ranges(C++20) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Constrained algorithms, e.g.ranges::copy,ranges::sort, ... | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Execution policies(C++17) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Numeric operations | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Operations on uninitialized memory | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Defined in header <algorithm> | ||
template<class BidirIt,class UnaryPred> BidirIt stable_partition( BidirIt first, BidirIt last, UnaryPred p); | (1) | (constexpr since C++26) |
template<class ExecutionPolicy,class BidirIt,class UnaryPred> BidirIt stable_partition( ExecutionPolicy&& policy, | (2) | (since C++17) |
[
first,
last)
in such a way that all elements for which the predicatep returnstrue precede the elements for which predicatep returnsfalse. Relative order of the elements is preserved.std::is_execution_policy_v<std::decay_t<ExecutionPolicy>> istrue. | (until C++20) |
std::is_execution_policy_v<std::remove_cvref_t<ExecutionPolicy>> istrue. | (since C++20) |
If any of the following conditions is satisfied, the behavior is undefined:
| (until C++11) |
| (since C++11) |
Contents |
first, last | - | the pair of iterators defining therange of elements to reorder |
policy | - | theexecution policy to use |
p | - | unary predicate which returns true if the element should be ordered before other elements. The expressionp(v) must be convertible tobool for every argument |
Type requirements | ||
-BidirIt must meet the requirements ofLegacyBidirectionalIterator. | ||
-UnaryPred must meet the requirements ofPredicate. |
Iterator to the first element of the second group.
Given\(\scriptsize N\)N asstd::distance(first, last):
The overload with a template parameter namedExecutionPolicy
reports errors as follows:
ExecutionPolicy
is one of thestandard policies,std::terminate is called. For any otherExecutionPolicy
, the behavior is implementation-defined.This function attempts to allocate a temporary buffer. If the allocation fails, the less efficient algorithm is chosen.
Implementations inlibc++ andlibstdc++ also accept ranges denoted byLegacyForwardIterators as an extension.
Feature-test macro | Value | Std | Feature |
---|---|---|---|
__cpp_lib_constexpr_algorithms | 202306L | (C++26) | constexpr stable sorting(1) |
#include <algorithm>#include <iostream>#include <vector> int main(){std::vector<int> v{0,0,3,-1,2,4,5,0,7}; std::stable_partition(v.begin(), v.end(),[](int n){return n>0;});for(int n: v)std::cout<< n<<' ';std::cout<<'\n';}
Output:
3 2 4 5 7 0 0 -1 0
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR | Applied to | Behavior as published | Correct behavior |
---|---|---|---|
LWG 2150 | C++98 | std::stable_partition was only required to place oneelement satisfyingp before one element not satisfyingp | corrected the requirement |
divides a range of elements into two groups (function template)[edit] | |
(C++20) | divides elements into two groups while preserving their relative order (algorithm function object)[edit] |