【STL】反向迭代器(Reverse Iterator)

來源:互聯網
上載者:User

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. 例子

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

輸出結果:

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.