반복자가 가리키는 요소를 지우고 다음 요소로 가기 위해 동일한 반복자를 한 줄로 진행할 수 있습니까?C++ 반복자 제거 설정
set<int>::iterator it = S.begin();
while (it != S.end()) {
if (shouldBeRemoved(*it)) {
S.erase(it++); // is this line valid?
} else {
++it;
}
}
반복자가 가리키는 요소를 지우고 다음 요소로 가기 위해 동일한 반복자를 한 줄로 진행할 수 있습니까?C++ 반복자 제거 설정
set<int>::iterator it = S.begin();
while (it != S.end()) {
if (shouldBeRemoved(*it)) {
S.erase(it++); // is this line valid?
} else {
++it;
}
}
는 다음 요소로 이동합니다 반복자가 가리키는 요소를 삭제하고, 한 줄에 같은 반복자를 발전 할 수 있습니까?
예. 유효합니다.
근거 :
it++
it
단위는 다음의 요소를 지칭하지만 원래 값의 사본을 얻을 수 있도록. 따라서 it
은 erase()
이 호출 될 때 제거되는 요소를 참조하지 않습니다. std::set
의 경우 지운 요소에 대한 반복기 만 무효화됩니다. # 1
이 코드 예제는 반복기가 참조하는 요소를 제거하는 상용구 코드로 간주 할 수 있습니다.
참고 : std::set
를 들어
,
# 1C++ 03 표준 23.1.2/8 :
지워진 만 반복자 및 참조 요소가 무효화되었습니다.
예, 유효합니다. 식 은 함수가 호출되기 전에 완전히 평가되므로이 함수는 이전 값인 it
을 받지만 제거 (및 무효화)되는 시간까지 이미 반복기가 증가합니다.