| 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 ForwardIt,class OutputIt> OutputIt rotate_copy( ForwardIt first, ForwardIt middle, | (1) | (constexpr since C++20) |
template<class ExecutionPolicy, class ForwardIt1,class ForwardIt2> | (2) | (since C++17) |
Copies theleft rotation of[first, last) tod_first.
[first, last), such that in the destination range beginning atd_first, the elements in[first, middle) are placed after the elements in[middle, last) while the orders of the elements in both ranges are 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:
[first, middle) or[middle, last) is not avalid range.Contents |
| first, last | - | the pair of iterators defining the sourcerange of elements to copy |
| middle | - | an iterator to an element in[first, last) that should appear at the beginning of the new range |
| d_first | - | beginning of the destination range |
| policy | - | theexecution policy to use |
| Type requirements | ||
-ForwardIt, ForwardIt1, ForwardIt2 must meet the requirements ofLegacyForwardIterator. | ||
-OutputIt must meet the requirements ofLegacyOutputIterator. | ||
Output iterator to the element past the last element copied.
Exactlystd::distance(first, last) assignments.
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.See also the implementations inlibstdc++,libc++, andMSVC STL.
#include <algorithm>#include <iostream>#include <iterator>#include <vector> int main(){std::vector<int> src{1,2,3,4,5};std::vector<int> dest(src.size());auto pivot=std::find(src.begin(), src.end(),3); std::rotate_copy(src.begin(), pivot, src.end(), dest.begin());for(int i: dest)std::cout<< i<<' ';std::cout<<'\n'; // copy the rotation result directly to the std::cout pivot=std::find(dest.begin(), dest.end(),1); std::rotate_copy(dest.begin(), pivot, dest.end(),std::ostream_iterator<int>(std::cout," "));std::cout<<'\n';}
Output:
3 4 5 1 21 2 3 4 5
| rotates the order of elements in a range (function template)[edit] | |
(C++20) | copies and rotate a range of elements (algorithm function object)[edit] |