OutputIt rotate_copy( ForwardIt first, ForwardIt middle,
class ForwardIt1, class ForwardIt2 >
ForwardIt2 rotate_copy( ExecutionPolicy&& policy,
ForwardIt1 first, ForwardIt1 middle,
Copies the left rotation of [
first,
last)
to d_first.
1) Copies the elements from the range [
first,
last)
, such that in the destination range beginning at d_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.
2) Same as (1), but executed according to policy.
This overload participates in overload resolution only if all following conditions are satisfied:
If any of the following conditions is satisfied, the behavior is undefined:
[
first,
middle)
or [
middle,
last)
is not a valid range.[
first,
last)
that should appear at the beginning of the new range d_first - beginning of the destination range policy - the execution policy to use Type requirements -ForwardIt, ForwardIt1, ForwardIt2
must meet the requirements of LegacyForwardIterator. -OutputIt
must meet the requirements of LegacyOutputIterator. [edit] Return value
Output iterator to the element past the last element copied.
[edit] ComplexityExactly std::distance(first, last) assignments.
[edit] ExceptionsThe overload with a template parameter named ExecutionPolicy
reports errors as follows:
ExecutionPolicy
is one of the standard policies, std::terminate is called. For any other ExecutionPolicy
, the behavior is implementation-defined.See also the implementations in libstdc++, libc++, and MSVC STL.
template<class ForwardIt, class OutputIt> constexpr // since C++20 OutputIt rotate_copy(ForwardIt first, ForwardIt middle, ForwardIt last, OutputIt d_first) { d_first = std::copy(middle, last, d_first); return std::copy(first, middle, d_first); }[edit] Example
#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:
[edit] See alsoRetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4