reverse_iterator
withを使用することは合法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())
リバースイテレータは実際にはフォワードイテレータであるため、すべてが有効です。
「逆イテレータ」はイテレータのカテゴリではありません。いくつかのイテレータカテゴリを覚えておいてください:
*
)および増分(++
)できるイテレーターは、順方向イテレーターです。+
ランダムアクセスイテレータは、演算子も持つ双方向イテレータです-
。一方、リバースイテレータは、コレクションを逆方向に見る双方向イテレータまたはランダムアクセスイテレータです。見る
http://www.cplusplus.com/reference/std/iterator/reverse_iterator/
...特に「メンバータイプ」の見出しの下にあるiterator_categoryについての説明。