2012-05-21 2 views
9

私はこのようなものを使用します。 マップが空でない場合、map :: begin()の返り値に関する情報が見つかりませんでした。空のマップのmap :: begin()の戻り値は何ですか?これは、マップが空の場合でも動作します場合、私はちょうど思っていた</p> <pre><code>map<string, Data>::iterator it = mymap->begin(); map<string, Data>::iterator end = mymap->end(); while (it != end) { // do stuff ++it; } </code></pre> <p>:

+0

小さなプログラムを作成してテストすることをお勧めしますか? –

+1

'std :: distance(begin、end)'はゼロになります。 –

+0

ニース!私はこの機能を知らなかった。 – HWende

答えて

15

マップが空の場合、beginendイテレーターは等しい、つまりmymap->end()を返します。

+0

これは当てはまります。マップが空の場合に使用する前に、 'begin()'で返されたイテレータを 'end()'と比較する必要があります。 'do ... while()'、制御された文を実行する前に正しくテストします)。値が何であるかを尋ねると、それは 'end()'と同じものを提供し、イテレータの実際の要素への必要性を異ならせるものであれば何でも構いません...標準は適切な値を選択するためにコンパイラ/ –

+0

'map :: empty()'をテストする方が良いと思いますか? –

-1

イテレータの末尾をインクリメントしようとしてはいけません。 イテレータを空のマップにするかどうかを確認する必要があります。そのため、使用する前に地図やイテレータをチェックするifステートメントが必要です。

+0

'if'文が唯一の条件文ではないので、この質問で使用される' while'もうまく動作します。 –

+0

空のマップの場合、 'it == end'になります。したがって、コードはループ中に入力されません。これは、反復子の逆参照に問題がないことを意味します。 –

関連する問題

 関連する問題