출처는 밑에 있습니다.
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++;
}
위와 같이 하니까 때때로 발생하던 런타임 오류가 없어졌다...
이거때문에 며칠간 삽질 엄청 한거 생각하면
'연구관련 > 프로그래밍' 카테고리의 다른 글
개인적으로 자주 쓰는 define 문 (0) | 2011.03.22 |
---|---|
stl vector erase 사용시 주의점1 (0) | 2010.12.29 |
c++ vector 사용법 (0) | 2010.12.13 |
Messagebox : c 에서 AfxMessagebox 같은걸 쓰고 싶을때 (0) | 2010.12.08 |
afxcontrolbars.h 에러 , fatal error C1083: Cannot open include file: 'afxcontrolbars.h': No such file or directory (0) | 2010.12.08 |