2012-05-30 67 views
4

使用reverse_iteratorstd::equal合法嗎?std ::等於reverse_iterator

例如,這些是否合法?

std::equal(v.begin(), v.end(), w.rbegin()) 

std::equal(v.rbegin(), v.rend(), w.begin()) 

std::equal(v.rbegin(), v.rend(), w.rbegin()) 
+3

所有的是,是什麼讓你覺得不然? – Xeo

+0

@Xeo:http://www.cplusplus.com/reference/algorithm/equal/在參數下表示它接受前向迭代器,並沒有提到反向迭代器。 –

+0

@trinithis:http://en.cppreference.com/w/cpp/iterator/reverse_iterator表示'std :: reverse_iterator <>'繼承了底層迭代器的迭代器類別,它用於'std :: vector <>'是隨機訪問,這是一個前鋒的超集。 – ildjarn

回答

7

全部都是有效的,因爲反向迭代器,其實前向迭代器

「反向迭代器」不是迭代器類別。 記住一些迭代器分類:

  • 可以解除引用(*)和遞增(++)迭代器是一個正向迭代器。
  • 也可以遞減的前向迭代器是一個雙向迭代器。
  • 隨機訪問迭代器是一個雙向迭代器,它也有+-運算符。

另一方面,反向迭代器是一個雙向迭代器或隨機訪問迭代器,它以反向方式查看集合。看看

http://www.cplusplus.com/reference/std/iterator/reverse_iterator/

...尤其是它在「會員類型」的標題說,有關的iterator_category。

+0

[請不要鏈接到cplusplus.com](http://programmers.stackexchange.com/q/88241/33100); cppreference.com要好得多。 – ildjarn

相關問題