반응형
vector
-
c++ iterator에서 vector 요소를 삭제하기 및 주의점IT/C C++ 2023. 6. 17. 16:25
아래와 같은 말도 안 되는 벡터가 있다고 가정해 보자. 뭔가 잘못된 문자가 껴 있는 거 같아서 iterator를 돌려서 특정 문자를 삭제해보려고 한다. 위처럼 iterator를 돌려서 특정 조건에 해당하는 요소를 erase 함수로 지울 수 있다. 그런데 이것은 틀렸습니다!! 위 코드를 돌려보면 애석하게도 결과는 아래와 같이 나온다. 해당 iterator의 요소를 erase 함수로 삭제해 버리면 해당 it 값은 사라져 버리고 erase 함수는 삭제에 성공하면 그다음 위치의 iterator 위치를 반환하기 때문에 위처럼 코드를 작성하면 모든 vector를 순회하지 못하기 때문이다. 위 코드처럼 조건에 맞는 erase 가 호출되었을 때 it의 위치를 erase가 반환해 주는 포지션 (삭제된 it의 다음 위치)..