若要將vector中反過來列印,該怎麼做呢?STL提供了reverse_iterator。

 1如何使用reverse_iterator? (C/C++) (STL)_#include如何使用reverse_iterator? (C/C++) (STL)_ios_02/**//* 
 2如何使用reverse_iterator? (C/C++) (STL)_ios_03(C) OOMusou 2006 http://oomusou.cnblogs.com
 3如何使用reverse_iterator? (C/C++) (STL)_ios_03
 4如何使用reverse_iterator? (C/C++) (STL)_ios_03Filename    : ReverseIterator.cpp
 5如何使用reverse_iterator? (C/C++) (STL)_ios_03Compiler    : Visual C++ 8.0 / ISO C++
 6如何使用reverse_iterator? (C/C++) (STL)_ios_03Description : Demo how to use reverse_iterator
 7如何使用reverse_iterator? (C/C++) (STL)_ios_03Release     : 12/17/2006 1.0
 8如何使用reverse_iterator? (C/C++) (STL)_ios_09*/

 9如何使用reverse_iterator? (C/C++) (STL)_/C_10#include <iostream>
10如何使用reverse_iterator? (C/C++) (STL)_/C_10#include <vector>
11如何使用reverse_iterator? (C/C++) (STL)_/C_10#include <algorithm>
12如何使用reverse_iterator? (C/C++) (STL)_/C_10
13如何使用reverse_iterator? (C/C++) (STL)_/C_10using namespace std;
14如何使用reverse_iterator? (C/C++) (STL)_#include如何使用reverse_iterator? (C/C++) (STL)_ios_02int main() 如何使用reverse_iterator? (C/C++) (STL)_c++_17{
15如何使用reverse_iterator? (C/C++) (STL)_c++_18如何使用reverse_iterator? (C/C++) (STL)_ios_19  int ia[] = 如何使用reverse_iterator? (C/C++) (STL)_c++_17{123};
16如何使用reverse_iterator? (C/C++) (STL)_ios_03  vector<int> ivec(ia, ia + sizeof(ia) / sizeof(int));
17如何使用reverse_iterator? (C/C++) (STL)_ios_03
18如何使用reverse_iterator? (C/C++) (STL)_ios_03  // use reverse_iterator by for loop
19如何使用reverse_iterator? (C/C++) (STL)_ios_03  for(vector<int>::reverse_iterator r_iter = ivec.rbegin(); r_iter != ivec.rend(); ++r_iter) 
20如何使用reverse_iterator? (C/C++) (STL)_ios_03    cout << *r_iter << " ";
21如何使用reverse_iterator? (C/C++) (STL)_ios_03
22如何使用reverse_iterator? (C/C++) (STL)_ios_03  cout << endl;
23如何使用reverse_iterator? (C/C++) (STL)_ios_03
24如何使用reverse_iterator? (C/C++) (STL)_ios_03  // use ordinary iterator to print reversely
25如何使用reverse_iterator? (C/C++) (STL)_c++_18如何使用reverse_iterator? (C/C++) (STL)_ios_19  for(vector<int>::const_iterator iter = (--ivec.end()); iter >= ivec.begin();iter--如何使用reverse_iterator? (C/C++) (STL)_c++_17{
26如何使用reverse_iterator? (C/C++) (STL)_ios_03    cout << *iter << " ";
27如何使用reverse_iterator? (C/C++) (STL)_ios_03    if (iter == ivec.begin()) 
28如何使用reverse_iterator? (C/C++) (STL)_ios_03      break;
29如何使用reverse_iterator? (C/C++) (STL)_c++_36  }

30如何使用reverse_iterator? (C/C++) (STL)_ios_03
31如何使用reverse_iterator? (C/C++) (STL)_ios_03  cout << endl;
32如何使用reverse_iterator? (C/C++) (STL)_ios_03
33如何使用reverse_iterator? (C/C++) (STL)_ios_03  // use reverse_iterator with copy() algorithm
34如何使用reverse_iterator? (C/C++) (STL)_ios_03  copy(ivec.rbegin(), ivec.rend(), ostream_iterator<int>(cout, " "));
35如何使用reverse_iterator? (C/C++) (STL)_ios_03  cout << endl;
36如何使用reverse_iterator? (C/C++) (STL)_ios_09}


執行結果

如何使用reverse_iterator? (C/C++) (STL)_/C_103 2 1
如何使用reverse_iterator? (C/C++) (STL)_/C_10
3 2 1
如何使用reverse_iterator? (C/C++) (STL)_/C_10
3 2 1
如何使用reverse_iterator? (C/C++) (STL)_/C_10請按任意鍵繼續 . . .


19行的for loop,使用了reverse_iterator,讓我們很簡單的如操作一般的iterator般去處理reverse_iterator。

25行到29行,使用了一般的iterator去處理,程式有點詭異,主要是讓我們看出,若沒有reverse_iterator,程式有多難寫。

copy() algorithm也可搭配reverse_iterator,只需一行就可以了。