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. 例子spa
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 }
輸出結果:.net
-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/8205784code