Tunko Development Diary

std::vector erase 사용하기 본문

Development/C++, C++11

std::vector erase 사용하기

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


반응형
Comments