reverse_iterator를 iterator로 변환하는 방법에 대해...
글쓴이: lnsium / 작성시간: 목, 2005/04/14 - 9:58오전
CDrawObjectContainer::reverse_iterator i; i = std::find_if(DrawObjects.rbegin(), DrawObjects.rend(), Compare(LOWORD(lParam), HIWORD(lParam))); if(i != DrawObjects.rend()) { delete *i; DrawObjects.erase(i.base()); }
DrawObjects는 vector<CDrawObject*>이고요
뒤에서 부터 검색해서 삭제할 것을 찾아 삭제하는 것입니다.
Compare는 함수객체고요.
핵심은 reverse_iterator를 이용해서 vector에서 바로 제거할 수 없어 iterator로 전환한 후 (i.base()) 제거할려고 하는데 제대로 지워지지 않는군요.
제가 잘못 알고 있나요? 아니면 다른 방법은...
제가 찾은 다른 방법은 다음과 같습니다.
CDrawObjectContainer::reverse_iterator i; i = std::find_if(DrawObjects.rbegin(), rawObjects.rend(), Compare(point)); if(i != DrawObjects.rend()) { delete *i; DrawObjects.erase(std::find(DrawObjects.begin(), DrawObjects.end(), *i)); //DrawObjects.erase(i.base()); // shit. return true; }
Forums:
쩝..찾았습니다..ㅠ.ㅠ
이렇게 하면 되는군요..ㅠ.ㅠ
i.base() - 1 이렇게 안 한 이유는 list에도 적용되게 하기 위해서입니다.
이렇게 해도 됩니다.[code:1] if(i != DrawOb
이렇게 해도 됩니다.
감사합니다.
감사합니다.. :D
댓글 달기