函数模板
<algorithm>

std::reverse

template <class BidirectionalIterator>  void reverse (BidirectionalIterator first, BidirectionalIterator last);
反转范围
反转范围 [first,last) 中元素的顺序。

该函数调用 iter_swap 将元素交换到其新位置。

此函数模板的行为等同于
1
2
3
4
5
6
7
8
template <class BidirectionalIterator>
  void reverse (BidirectionalIterator first, BidirectionalIterator last)
{
  while ((first!=last)&&(first!=--last)) {
    std::iter_swap (first,last);
    ++first;
  }
}

参数

first, last
双向迭代器,指向要反转的序列的初始位置和结束位置。使用的范围是 [first,last),它包含 firstlast 之间的所有元素,包括 first 指向的元素,但不包括 last 指向的元素。
BidirectionalIterator 应指向一个类型,该类型已正确定义了 swap

返回值



示例

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

int main () {
  std::vector<int> myvector;

  // set some values:
  for (int i=1; i<10; ++i) myvector.push_back(i);   // 1 2 3 4 5 6 7 8 9

  std::reverse(myvector.begin(),myvector.end());    // 9 8 7 6 5 4 3 2 1

  // 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


复杂度

线性时间复杂度,与 firstlast 之间 距离 的一半成正比:交换元素。

数据竞争

范围[first,last)内的对象将被修改。

异常

如果元素交换或迭代器操作引发异常,则该函数也引发异常。
请注意,无效参数会导致未定义行为

另见