reverse_iterator를 iterator로 변환하는 방법에 대해...

lnsium의 이미지

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;
}
lnsium의 이미지

CDrawObjectContainer::reverse_iterator i;
 i = std::find_if(DrawObjects.rbegin(), DrawObjects.rend(), Compare(LOWORD(lParam), HIWORD(lParam)));
				 
 if(i != DrawObjects.rend())
 {
	 delete *i;
	 CDrawObjectContainer::iterator j = i.base();
	 DrawObjects.erase(--j);
 }	

이렇게 하면 되는군요..ㅠ.ㅠ

i.base() - 1 이렇게 안 한 이유는 list에도 적용되게 하기 위해서입니다.

doldori의 이미지

이렇게 해도 됩니다.

 if(i != DrawObjects.rend()) 
 { 
    delete *i; 
    DrawObjects.erase((++i).base()); 
 } 
lnsium의 이미지

감사합니다.. :D