11

I want to erase an element from a container which is being currently used within a ranged-based for loop. Will this cause undefined behaviour? Or will the next value of element after erase() be what the next element is supposed to be if I didn't call erase()?

Example:

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

1 Answer 1

11

It should be a undefined behavior. Because according to 14882/2011 the range-based for statement is equivalent to:

auto && __range = range-init; for ( auto __begin = begin-expr(__range), __end = end-expr(__range); __begin != __end; ++__begin ) { for-range-declaration = *__begin; statement } 
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.