루미앗

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 문 자체 반복증감요소는 제거하여야 한다는것이다.

Comment +0