在范围for循环中删除容器中的元素

11

我想从一个正在使用范围for循环的容器中删除一个元素。这样做会导致未定义行为吗?还是在调用erase()之后,element的下一个值将是如果我没有调用erase()时应该是的下一个元素的值?

例如:

std::map<int, int> someMap;
/* Fill in someMap */
for (auto& element : someMap)
{
    /* ... */
    if ( /* Some condition */ )
        someMap.erase(element.first);
}
1个回答

11

这应该是一种未定义行为。因为根据14882/2011,range-based for语句等同于:

auto && __range = range-init;
for ( auto __begin = begin-expr(__range),
   __end = end-expr(__range);
   __begin != __end;
   ++__begin ) {
   for-range-declaration = *__begin;
   statement
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接