0

タイプのマップを逆に反復しようとしています:

0 3 7 10 15

このマップを 10 から開始点まで逆に繰り返す必要があります。

for(map<unsigned int, Object*>::reverse_iterator rit(mapA.find(10)); rit != mapA.rend(); ++rit) {
    cout << rit->first << endl;
}

ただし、次のことがわかりました。

7 3 0

この反復の何が問題なのか、わかりますか?

4

2 に答える 2

0

順方向反復子と逆方向反復子は 1 対 1 で対応します。前方反復子シーケンスには「終了後」反復子 ( end) があり、逆反復子シーケンスには「開始前」反復子 ( rend) があります。

前方イテレータを返すためfind、前方イテレータを対応する逆イテレータに変換しています。これは同じ場所を指すことはできません。そうしないと、「終了後」のイテレータに対応するものがないためです。

要素 1-> 0、 2-> 3、 3-> 7、 4-> 10、および 5->を持つマップを考えてみましょう15

前方反復子は 1-> 0、 2-> 3、 3-> 7、 4-> 10、 5-> 15、 6->endです。

逆反復子は、 1-> rend、 2-> 0、 3-> 3、 4-> 7、 5-> 10、 6->15です。

したがって、順方向イテレーター 10 に対応する逆方向イテレーターは 7 です。これらは両方ともシーケンスの 4 番目のイテレーターです。

于 2013-11-09T06:33:51.027 に答える