如何通过推进std :: map迭代器来停止for循环?

时间:2016-08-02 15:02:38

标签: c++ loops c++11 stdmap

我通过使用外部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循环,但是它不起作用。我也试图得到结束迭代器并推进它以结束循环。显然,这也不起作用。

那么,我怎样才能真正停止内循环?

感谢。

1 个答案:

答案 0 :(得分:7)

  

我希望在满足条件时停止内循环。

break会完全这样做。

或者,您可以将该条件作为循环条件的一部分。

  

我知道如果我打电话给休息,它会停止两个循环。

你知道错了。

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

当且仅当markerCounter2 == ellipsePropertiesMap.begin()时才有效。如果条件在除第一个迭代之外的任何其他迭代上得到满足,则将迭代器递增到结尾并具有未定义的行为。此外,这个迭代器推进不会突破循环体,它将被执行,直到下次检查循环条件。

markerCounter2 = ellipsePropertiesMap.end();

这将不满足循环条件,导致循环在当前迭代结束时停止。但是执行

markerCounter2++;

之后它会再次超过结束并拥有UB。