2011-12-24 2 views
10

범위 기반 for 루프 내에서 현재 사용중인 컨테이너에서 요소를 지우고 싶습니다. 이로 인해 정의되지 않은 동작이 발생합니까? 또는 erase()을 호출하지 않은 경우 의 다음 값은 erase() 다음 요소가 될 것입니다.범위 기반 for 루프 내에있는 컨테이너에서 요소 지우기

예 :

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

답변

12

그것이 정의되지 않은 동작해야한다. 14882/2011에 따르면 범위 기반 for 문은 다음과 같습니다.

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