1. 程式人生 > >【C++ Primer | 10】再探叠代器

【C++ Primer | 10】再探叠代器

begin clu eve ++ algorithm end 測試 區間 code

反向叠代器

1. 測試代碼:

 1 #include<iostream>
 2 #include<vector>
 3 #include<iterator>
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     vector<int> vec = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
 9     for (auto r_iter = vec.crbegin(); r_iter != vec.crend(); ++r_iter)
10         cout << *r_iter << "
"; 11 cout << endl; 12 return 0; 13 }

輸出結果:

技術分享圖片

2. 測試代碼:

 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 for (int i = 1; i <= 9; ++i) 16 coll.push_back(i); 17 18 deque<int>::iterator pos1; 19 pos1 = find(coll.begin(), coll.end(), 2); 20 21 deque<int>::iterator pos2; 22 pos2 = find(coll.begin(), coll.end(), 7
); 23 for_each(pos1, pos2, print); 24 cout << endl; 25 26 deque<int>::reverse_iterator rpos1(pos1); 27 deque<int>::reverse_iterator rpos2(pos2); 28 for_each(rpos2, rpos1, print); 29 cout << endl; 30 return 0; 31 }

輸出結果:

技術分享圖片

【分析】

代碼首先在一個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,下面的圖片解釋的很清楚。

技術分享圖片

【C++ Primer | 10】再探叠代器