如何通过推进 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。