STL : 反向迭代器(Reverse Iterator)


1. 定義
反向迭代器(Reverse Iterator)是一種反向遍歷容器的迭代器。也就是,從最后一個元素到第一個元素遍歷容器。反向迭代器將自增(和自減)的含義反過來了:對於反向迭代器,++運算將訪問前一個元素,而--運算則訪問下一個元素。
2. 作用
(1)反向迭代器需要使用自減操作符:標准容器上的迭代器(reverse_iterator)既支持自增運算,也支持自減運算。但是,流迭代器由於不能反向遍歷流,因此流迭代器不能創建反向迭代器。
(2)可以通過reverse_iterator::base()將反向迭代器轉換為普通迭代器使用,從逆序得到普通次序。這是因為:有些容器的成員函數只接受iterator類型的參數,所以如果你想要在ri所指的位置插入一個新元素,你不能直接這么做,因為vector的insert函數不接受reverse_iterator。如果你想要刪除ri 所指位置上的元素也會有同樣的問題。erase成員函數會拒絕reverse_iterator,堅持要求iterator。為了完成刪除和一些形式的插入操作,你必須先通過base函數將reverse_iterator轉換成iterator,然后用iterator來完成工作。

3. 例子

 1 void test_reverse()  
 2 {  
 3     int a[] = {-2, -1, 0, 1, 2, 3, 4};  
 4     std::list<int> lst(a, a + sizeof(a)/sizeof(int));  
 5     std::copy(lst.begin(), lst.end(), std::ostream_iterator<int>(std::cout, " "));  
 6     std::cout << std::endl;  
 7   
 8     std::list<int>::reverse_iterator rit = lst.rbegin();  
 9     while(rit != lst.rend())  
10         std::cout << *rit++ << " ";  
11     std::cout << std::endl;  
12   
13     // 使用base()實現insert或erase等操作。  
14     std::vector<int> vect(a, a + sizeof(a)/sizeof(int));  
15     // 反向迭代器指向2  
16     std::vector<int>::reverse_iterator vrit = std::find(vect.rbegin(), vect.rend(), 2);  
17     // 注意:正向迭代器是指向3  
18     std::vector<int>::iterator it(vrit.base());  
19     inserter(vect, it) = 10;  
20     std::copy(vect.begin(), vect.end(), std::ostream_iterator<int>(std::cout, " "));  
21     std::cout << std::endl;  
22 }  

輸出結果:

-2 -1 0 1 2 3 4  
4 3 2 1 0 -1 -2  
-2 -1 0 1 2 10 3 4  
請按任意鍵繼續. . .  

 

來源:http://blog.csdn.net/huang_xw/article/details/8205784


免責聲明!

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



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