12

unordered_mapbegin()、end()、および前方反復子を使用して、を反復処理するのは奇妙に思えます。

もしそうなら、なぜそれはrbegin()、rend()そして双方向イテレータも持っていないのですか?技術的な理由はありますか?

4

2 に答える 2

24

順序付けされていないため、反復が行われる順序は重要ではありません(または重要ではありません)。

于 2013-01-29T23:22:14.197 に答える
11

から引用The C++ Standard Library

逆イテレータは、インクリメント演算子の呼び出しを内部的にデクリメント演算子の呼び出しに、またはその逆に切り替えることにより、アルゴリズムを逆方向に動作させます。双方向イテレータまたはランダムアクセスイテレータを備えたすべてのコンテナ(forward_listおよびすべての連想コンテナを除くすべてのシーケンスコンテナ)は、メンバー関数rbegin()およびrend()を介してリバースイテレータを作成できます。C ++ 11以降、読み取り専用イテレータを返す対応するメンバー関数crbegin()およびcrend()も提供されています。

forward_listsおよび順序付けされていないコンテナーの場合、後方反復インターフェース(rbegin()、rend()など)は提供されません。その理由は、実装が要素を通過するために単一にリンクされたリストのみを必要とするためです。

于 2013-01-30T00:03:19.260 に答える