(原創) 如何使用reverse_iterator? (C/C++) (STL)

时间:2022-09-01 18:33:20

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

 1 (原創) 如何使用reverse_iterator? (C/C++) (STL)(原創) 如何使用reverse_iterator? (C/C++) (STL) /* 
 2(原創) 如何使用reverse_iterator? (C/C++) (STL)(C) OOMusou 2006 http://oomusou.cnblogs.com
 3(原創) 如何使用reverse_iterator? (C/C++) (STL)
 4(原創) 如何使用reverse_iterator? (C/C++) (STL)Filename    : ReverseIterator.cpp
 5(原創) 如何使用reverse_iterator? (C/C++) (STL)Compiler    : Visual C++ 8.0 / ISO C++
 6(原創) 如何使用reverse_iterator? (C/C++) (STL)Description : Demo how to use reverse_iterator
 7(原創) 如何使用reverse_iterator? (C/C++) (STL)Release     : 12/17/2006 1.0
 8(原創) 如何使用reverse_iterator? (C/C++) (STL)*/

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

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


執行結果

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


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

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

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