なぜstd::reverse(c.begin(), c.end())
は、基本コンテナc
が双方向イテレータを提供する必要があるのですか?なぜstd :: reverseは双方向イテレータを必要としますか?
事実、これは(マルチ)map
、(マルチ)set
を意味しますが、それらは順序付けされているため、逆もありません。唯一の他のは、双方向コンテナはlist
ですが、独自のメンバ関数.reverse()
を持っています。
これは、1つはarray
、vector
とランダムアクセスあるdeque
にstd::reverse
を適用することができます。
だから、 "正直"ではなく、ランダムアクセスが必要なのか、メンバー関数を使用するのはなぜですか?
これは、ユーザー定義のイテレータに対して不必要に制限されるため、 – krzaq
@krzaqと思っていました。しかし、私は、出荷される潜在的なターゲットの80%に特定の機能を適用できないことは奇妙であると考えました。私は、おそらく "順序付けられた"とか何かを言うか、または直交している反復子カテゴリを発明したでしょう。 Esp。 non-applicabilityはそれらのref-pagesの 'std :: reverse'のドキュメントには言及されていないからです。おそらく仕様自体にあるでしょうか? – towi
'map'または' set'を 'merge'-target(出力イテレータが必要)として使用できますか? 'map'や' set'の 'remove'はどうでしょうか?おそらく、彼らは並べ替えのために、しかし書かれているのでしょうか? – towi