2016-08-02 23 views
-1

私は、forのループと入れ子のforループを使用してstd::mapを2回繰り返しています。私は条件が満たされたときに内側のループを止めたい。私は休憩を呼ぶと、両方のループを止めることを知っています。私はそれを望んでいない。私は内部のループを中止したいだけですforループ。std :: map iteratorを進めてforループを止めるには?

私のコードスニペットは以下の通りである:私はのstd ::マップのサイズによってイテレータを前進させることにより、ループの内部を停止しようとしているが、それは働いていない

for(auto markerCounter = ellipsePropertiesMap.begin(); markerCounter != ellipsePropertiesMap.end(); markerCounter++) 
    {          
     for(auto markerCounter2 = ellipsePropertiesMap.begin(); markerCounter2 != ellipsePropertiesMap.end(); markerCounter2++) 
     { 
      if(conditionMet) 
      std::advance(markerCounter2, ellipsePropertiesMap.size()); 
      //I also tried the following: 
      //markerCounter2 = ellipsePropertiesMap.end(); 
      //markerCounter2++; 
     } 
    } 

。私はまた、終了イテレータを取得し、ループを終了するためにそれを進めようとしました。明らかにそれはどちらも動作していません。

私は実際にどのようにして内側のループを止めることができますか?

ありがとうございました。

+9

'break'は1つのループにのみ影響します – DimChtz

+0

条件はどのくらい複雑ですか?ループを終了する以外に条件が満たされていれば特別なことをする必要がありますか?多くの場合、ループ自体の条件部分に追加することができます。 – NathanOliver

答えて

7

条件が満たされたときに内側のループを停止します。

breakと正確に一致します。

また、その条件をループ条件の一部にすることができます。

ブレークを呼び出すと、両方のループが停止することがわかります。

あなたは間違っていました。


std::advance(markerCounter2, ellipsePropertiesMap.size()); 

場合にのみmarkerCounter2 == ellipsePropertiesMap.begin()場合、これは有効になります。条件が最初の反復以外の反復で満たされている場合は、反復子を最後までインクリメントし、未定義の動作をします。また、この反復子の前進はループ本体から抜け出ることはなく、ループ状態が次回チェックされるまで実行されます。

markerCounter2 = ellipsePropertiesMap.end(); 

これは、ループが現在の反復の終わりで停止させ、ループ条件をDIS-満足します。それが再び終わりを過ぎてインクリメントし、UBを持っているでしょうした後、しかし

markerCounter2++; 

を実行します。

関連する問題