Effective STL에서 wrong code 의 예로 나온 것입니다.
//Remove the last occurence of 3
vector<int> v;
blobloblo;
vector<int>::reverse_iterator ri = find( v.rbegin(), v.rend(), 3);
v.erase( --ri.base() );
여기서 마지막 줄을
v.erase( (++ri).base() );
이걸로 바꿔쓰는게 좋다고 그러거든요.
그 이유가 vector class의 iterator가 대부분의 플렛폼에서 built-in pointer로 구현되기 때문에,
ri.base()는 pointer를 리턴하게 된다고 그래서 그 경우 위의 코드가 컴파일이 안된다고 해요.
그런데, ri.base()가 pointer를 리턴하는 거랑 --ri.base()가 컴파일 안되는 거랑 아무 상관이 없을 것 같거든요.
ri.base()가 pointer이면 포인터에 --연산자 하는 것은 아무 문제가 없는 것이라고 생각하는데, 맞나요?
|