A2공간 - 도움되는 글을 쓰자

ani2life.egloos.com

포토로그


그냥 잡담

※방명록은 따로 없고 무조건 최신글에 댓글 남기시면 됩니다. ^^

위드블로그



VC++8.0에서의 vector::erase(), iterator 개발/플밍

VC++8.0 이하의 버전에서는 vector 객체를 iterator로 순환하면서 vector 내의 아이템을 삭제할 때 아래와 같은 코드에 문제가 없었습니다.

std::vector<int> vt;
std::vector<int>::iterator it;

for(it=vt.begin();it<vt.end();it++){
    if(조건){
        vt.erase(it);
    }
}

하지만 VC++8.0에서는 런타임시 오류가 발생합니다.
그래서 아래와 같이 코드를 바꿨습니다.

for(it=vt.begin();it<vt.end();){
    if(조건){
        it = vt.erase(it);
    }
    else{
        it++;
    }
}

vector::erase()는 반환값으로 삭제한 iterator의 다음 iterator를 반환합니다.



덧글

  • 아아 2008/06/22 13:20 # 삭제

    감사합니다.ㅠㅠ

    2시간을 헤메던건데. 덕분에 깔끔하게 해결했네요~

    복받으세요 ㅎㅎ
  • Chulin 2010/10/06 09:37 # 삭제

    깔끔하네요! 감사합니다 ^^
  • 선배 2012/12/12 18:02 # 삭제

    감사해요..