如何通过推进 std::map 迭代器来停止 for 循环?
How to stop a for loop by advancing the std::map iterator?
我通过使用外部 for
循环和嵌套 for
循环迭代 std::map
两次。我想在满足条件时停止内部循环。我知道如果我调用 break,它会停止两个循环。我不想要那个。我只想停止内部 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 循环,但它不起作用。我还尝试获取结束迭代器并将其推进以结束循环。显然这也不起作用。
那么,我怎样才能真正停止内循环?
谢谢。
I want stop the inner loop when the condition is met.
break
会做到这一点。
或者,您可以使该条件成为循环条件的一部分。
I know that if I call break, it will stop both the loops.
你知道错了。
std::advance(markerCounter2, ellipsePropertiesMap.size());
当且仅当 markerCounter2 == ellipsePropertiesMap.begin()
时这才有效。如果在除第一次之外的任何其他迭代中满足条件,则将迭代器递增到末尾并具有未定义的行为。此外,此迭代器推进不会跳出循环体,循环体将一直执行到下一次检查循环条件为止。
markerCounter2 = ellipsePropertiesMap.end();
这将不满足循环条件,导致循环在当前迭代结束时停止。但是执行
markerCounter2++;
之后它会再次递增超过末尾并有 UB。
我通过使用外部 for
循环和嵌套 for
循环迭代 std::map
两次。我想在满足条件时停止内部循环。我知道如果我调用 break,它会停止两个循环。我不想要那个。我只想停止内部 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 循环,但它不起作用。我还尝试获取结束迭代器并将其推进以结束循环。显然这也不起作用。
那么,我怎样才能真正停止内循环?
谢谢。
I want stop the inner loop when the condition is met.
break
会做到这一点。
或者,您可以使该条件成为循环条件的一部分。
I know that if I call break, it will stop both the loops.
你知道错了。
std::advance(markerCounter2, ellipsePropertiesMap.size());
当且仅当 markerCounter2 == ellipsePropertiesMap.begin()
时这才有效。如果在除第一次之外的任何其他迭代中满足条件,则将迭代器递增到末尾并具有未定义的行为。此外,此迭代器推进不会跳出循环体,循环体将一直执行到下一次检查循环条件为止。
markerCounter2 = ellipsePropertiesMap.end();
这将不满足循环条件,导致循环在当前迭代结束时停止。但是执行
markerCounter2++;
之后它会再次递增超过末尾并有 UB。