Стирание элемента из контейнера внутри цикла for с диапазоном

Я хочу стереть элемент из контейнера, который в данный момент используется в цикле for на основе диапазона. Приведет ли это к неопределенному поведению? Или следующее значение element после erase() будет таким, каким должен быть следующий элемент, если я не вызывал erase()?

Пример:

std::map<int, int> someMap;
/* Fill in someMap */
for (auto& element : someMap)
{
    /* ... */
    if ( /* Some condition */ )
        someMap.erase(element.first);
}
10
задан ildjarn 27 December 2011 в 20:09
поделиться