8

reverse_iteratorwithを使用することは合法std::equalですか?

たとえば、これらのいずれかが合法ですか?

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

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

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

1 に答える 1

9

リバースイテレータは実際にはフォワードイテレータであるため、すべてが有効です。

「逆イテレータ」はイテレータのカテゴリではありません。いくつかのイテレータカテゴリを覚えておいてください:

  • 逆参照(*)および増分(++)できるイテレーターは、順方向イテレーターです。
  • デクリメントも可能なフォワードイテレータは、双方向イテレータです。
  • +ランダムアクセスイテレータは、演算子も持つ双方向イテレータです-

一方、リバースイテレータは、コレクションを逆方向に見る双方向イテレータまたはランダムアクセスイテレータです。見る

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

...特に「メンバータイプ」の見出しの下にあるiterator_categoryについての説明。

于 2012-05-30T18:55:21.687 に答える