函式模板
<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)內的物件將被修改。

異常

如果元素交換或迭代器操作引發異常,則該函式也引發異常。
請注意,無效引數會導致未定義行為

另見