작성
·
321
0
iterator 삭제 관련 질문입니다.
for 문에서 v.erase(it)를 이용하면 해당 공간에 iterator 정보가 사라져 다음 순번때 에러가 발생합니다.
for문을 사용하지 않고 erase를 동일하게 2번 적용할 경우 이떄는 정상적으로 작동합니다.
v.erase(v.begin() +2);
v.erase(v.begin() +3);
두 가지 방식이 삭제하는 방식이 같다고 생각되는데 무슨 차이가 있는지 궁금합니다.
감사합니다.
답변 1
0
2에서 문제가 없는 이유는 말 그대로 v.begin()을 기반으로 다시 iterator를 구하니까 그런 것입니다.
1에서는 기존 it을 그대로 재사용하고 있고요.
v.erase(it)을 하면 지정한 위치에 있는 데이터가 삭제되고,
벡터 특성상 모든 데이터가 한 칸씩 앞당겨 지기 때문에 원래 우리가 의도한
[다음 데이터]를 가리키는 상황이 아닙니다.
이게 마지막 데이터라면 특히나 문제가 될 수 있습니다 (접근하면 안 되는 영역에 접근)