[C++ STL] vector(벡터) erase 함수 제대로 사용하기
공부/C/C++2015. 10. 22. 10:09
CCL에 따라 복제한 게시글입니다.
원본, 저작권자 : http://createcode.tistory.com/13
1 2 3 4 5 6 | for (std::vector<_Object>::iterator iter = m_vecP.begin(); iter != m_vecP.end(); ){ if ((*iter).rank == rank) iter = m_vecP.erase(iter); else ++iter; } |
벡터의 요소를 for 문으로 돌면서,
조건을 만족하는경우 요소를 삭제하고
그렇지 않은경우 다음요소로 넘어가야하는 경우는 자주발생한다.
이럴 때, 단순히 erase(iter) 로 요소를 삭제하면 그 다음요소로의 반복자(iterator)가
무효화되어 버리므로, 오류를 발생시킨다.
다행히 erase 함수는 지울요소의 바로다음 반복자를 리턴하므로
이 반복자를 받아서 사용하자.
주의할점은, for 문 자체 반복증감요소는 제거하여야 한다는것이다.
'공부 > C/C++' 카테고리의 다른 글
[번역/SDL2] Getting an Image on the Screen (0) | 2015.12.12 |
---|---|
[llvm/clang] clang을 윈도우에서 써보자 (0) | 2015.11.22 |
c++ 블럭 주석을 OnOff 하기 편하게 사용하기 (0) | 2015.02.17 |
포인터와 동적배열 (0) | 2014.08.21 |
(C++) 클래스 내의 static 지정자 (0) | 2014.08.07 |