STL iterator和reverse_iterator


先看一段代碼:

 1 #include <iostream>
 2 #include <deque>
 3 #include <algorithm>
 4 #include <iterator>
 5 using namespace std;
 6 
 7 void print(int elem)
 8 {
 9     cout << elem << ' ';
10 }
11 
12 int main()
13 {
14     deque<int> coll;
15     
16     for(int i = 1; i <= 9; ++i)
17     {
18         coll.push_back(i);
19     }
20     
21     deque<int>::iterator pos1;
22     pos1 = find(coll.begin(), coll.end(), 2);
23 
24     deque<int>::iterator pos2;
25     pos2 = find(coll.begin(), coll.end(), 7);
26     
27     for_each(pos1, pos2, print);
28     cout << endl;
29     
30     deque<int>::reverse_iterator rpos1(pos1);
31     deque<int>::reverse_iterator rpos2(pos2);
32     
33     for_each(rpos2, rpos1, print);
34     cout << endl;
35 
36     return 0;
37 }

代碼首先在一個deque中插入1到9,然后查找元素值為2和7的位置,分別賦值給迭代器pos1和pos2,然后輸出,由於STL中的操作總是左開右閉的區間,即[2,7),所以輸出2 3 4 5 6,7不會輸出。

接下來將迭代器轉換成逆向迭代器,再次輸出,對於反向迭代器,由於是反向,所以按邏輯來說它是左開右閉的(這里我嘗試了rpos2為iterator.end(),rpos1為iterator.begin(),此時輸出全部),即(7,2](事實上還是左閉右開,只不過此時的左和iterator順序一樣)。所以輸出6 5 4 3 2,下面的圖片解釋的很清楚。

 

 

轉載請注明出處:http://www.cnblogs.com/fnlingnzb-learner/p/6097947.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM