我通过使用外部std::map
循环和嵌套for
循环迭代for
两次。我希望在满足条件时停止内循环。我知道,如果我打电话给休息,它将停止两个循环。我不想要那个。我只想停止内部for
循环。
我的代码段如下:
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++;
}
}
我试图通过按照std :: map的大小推进迭代器来停止内部for循环,但是它不起作用。我也试图得到结束迭代器并推进它以结束循环。显然,这也不起作用。
那么,我怎样才能真正停止内循环?
感谢。
答案 0 :(得分:7)
我希望在满足条件时停止内循环。
break
会完全这样做。
或者,您可以将该条件作为循环条件的一部分。
我知道如果我打电话给休息,它会停止两个循环。
你知道错了。
std::advance(markerCounter2, ellipsePropertiesMap.size());
当且仅当markerCounter2 == ellipsePropertiesMap.begin()
时才有效。如果条件在除第一个迭代之外的任何其他迭代上得到满足,则将迭代器递增到结尾并具有未定义的行为。此外,这个迭代器推进不会突破循环体,它将被执行,直到下次检查循环条件。
markerCounter2 = ellipsePropertiesMap.end();
这将不满足循环条件,导致循环在当前迭代结束时停止。但是执行
markerCounter2++;
之后它会再次超过结束并拥有UB。