Iterator Safety

반복자 무효화 재판단

반복자는 컨테이너 내부 위치를 가리키므로 삽입, 삭제, 재할당 뒤에는 기존 위치가 그대로 유효한지 확인해야 합니다.

vector

재할당과 뒤쪽 이동을 가장 먼저 의심

push_back이 capacity를 넘거나 중간 insert, erase가 일어나면 기존 반복자를 다시 얻습니다.

list

삭제된 노드의 반복자만 버림

노드 기반이라 다른 요소의 반복자는 대체로 유지되지만, 지운 요소를 가리키던 반복자는 즉시 폐기합니다.

map / set

삽입은 안정적, 삭제는 대상만 무효

삭제한 요소의 반복자는 다시 쓰지 말고, 필요한 위치는 find나 반환 반복자로 갱신합니다.

Safe Pattern

수정 연산 뒤 새 기준점을 잡습니다

erase의 반환값, 새 begin(), 새 find()를 사용하면 무효화된 반복자를 실수로 역참조할 가능성이 줄어듭니다.

Watch

반복 중 삭제할 때 증가 위치를 분리합니다

for (++it)erase(it)를 섞으면 이미 사라진 위치를 증가시킬 수 있으므로 반환 반복자로 루프를 이어갑니다.