function template
<algorithm>

std::reverse_copy

template <class BidirectionalIterator, class OutputIterator>  OutputIterator reverse_copy (BidirectionalIterator first,                               BidirectionalIterator last, OutputIterator result);
Copy range reversed
Copies the elements in the range [first,last) to the range beginning at result, but in reverse order.

此函数模板的行为等同于
1
2
3
4
5
6
7
8
9
10
11
template <class BidirectionalIterator, class OutputIterator>
  OutputIterator reverse_copy (BidirectionalIterator first,
                               BidirectionalIterator last, OutputIterator result)
{
  while (first!=last) {
    --last;
    *result = *last;
    ++result;
  }
  return result;
}

参数

first, last
Bidirectional iterators to the initial and final positions of the sequence to be copied. 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.
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, which contains the same elements in reverse order.

示例

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

int main () {
  int myints[] ={1,2,3,4,5,6,7,8,9};
  std::vector<int> myvector;

  myvector.resize(9);    // allocate space

  std::reverse_copy (myints, myints+9, 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: 9 8 7 6 5 4 3 2 1


复杂度

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.
请注意,无效参数会导致未定义行为

另见