function template
<algorithm>

std::rotate_copy

template <class ForwardIterator, class OutputIterator>  OutputIterator rotate_copy (ForwardIterator first, ForwardIterator middle,                              ForwardIterator last, OutputIterator result);
Copy range rotated left
Copies the elements in the range [first,last) to the range beginning at result, but rotating the order of the elements in such a way that the element pointed by middle becomes the first element in the resulting range.

此函式模板的行為等同於
1
2
3
4
5
6
7
template <class ForwardIterator, class OutputIterator>
  OutputIterator rotate_copy (ForwardIterator first, ForwardIterator middle,
                              ForwardIterator last, OutputIterator result)
{
  result=std::copy (middle,last,result);
  return std::copy (first,middle,result);
}

引數

first, last
Forward iterators to the initial and final positions of the range to be copy-rotated. The range used is [first,last), which contains all the elements between first and last, including the element pointed by first but not the element pointed by last.
Notice that in this function, these are not consecutive parameters, but the first and third ones.
middle
Forward iterator pointing to the element within the range [first,last) that is copied as the first element in the resulting range.
result
Output iterator to the initial position of the range where the reversed range is stored.
The pointed type shall support being assigned the value of an element in the range [first,last).

這些範圍不應重疊。

返回值

An output iterator pointing to the end of the copied range.

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// rotate_copy algorithm example
#include <iostream>     // std::cout
#include <algorithm>    // std::rotate_copy
#include <vector>       // std::vector

int main () {
  int myints[] = {10,20,30,40,50,60,70};

  std::vector<int> myvector (7);

  std::rotate_copy(myints,myints+3,myints+7,myvector.begin());

  // print out content:
  std::cout << "myvector contains:";
  for (std::vector<int>::iterator it=myvector.begin(); it!=myvector.end(); ++it)
    std::cout << ' ' << *it;
  std::cout << '\n';

  return 0;
}

輸出
myvector contains: 40 50 60 70 10 20 30


複雜度

Linear in the distance between first and last: Performs an assignment for each element.

資料競爭

訪問範圍 [first,last) 中的物件。
修改 result 和返回的迭代器之間的範圍內的物件。
Each object is accessed exactly once.

異常

Throws if either an element assignment or an operation on an iterator throws.
請注意,無效引數會導致未定義行為

另見