연구관련/프로그래밍
Visual Studio 2008, Vector erase할 때 주의사항
우주여행가
2010. 12. 29. 17:04
출처는 밑에 있습니다.
vector에 저장된 요소를 루프를 돌며 일정 부분을 삭제하는 루틴은 쓰이는 곳이 많다.
보통 아래와 같이 이터레이터로 루프를 돌린다.
vector≪MyObj*≫ lists_;
vector≪MyObj*≫::iterator itr;
for ( itr = lists_.begin() ; itr != lists_.end() ; itr++ )
{
MyObj* obj = *itr;
if ( 조건 )
{
delete obj;obj=NULL;
lists_.erase(itr);
}
}
그런데, 그전까지 잘 동작하던 위 코드가 Visual studio 2008에서 작성할때는 때때로 오류가 발생하였다.
항상 발생하는 것은 아니고 때때로...
구글링을 통해서 해결책을 찾은것은 erase 결과로 이터레이터를 받는 식으로 고치는 것이다.
for ( itr = lists_.begin() ; itr != lists_.end() ; )
{
MyObj* obj = *itr;
if ( 조건 )
{
delete obj;obj=NULL;
itr = lists_.erase(itr);
}
else
itr++;
}
위와 같이 하니까 때때로 발생하던 런타임 오류가 없어졌다...
이거때문에 며칠간 삽질 엄청 한거 생각하면