2012-08-13 5 views
1

벡터에서 중복 된 숫자를 삭제하려고합니다. 이를 위해 다음을 사용합니다.vector.erase가 내 복제본을 모두 삭제하는 이유는 무엇입니까?

vec1.erase( unique(vec1.begin(),vec1.end()) ,vec1.end()); 

Google과 함께 사용하면 문제가 해결됩니다. 제 질문은 왜 그런가요? 내가 cplusplus에서 읽은 바에 따르면 지우기은 마지막 매개 변수에서 첫 번째 매개 변수를 제거합니다. 예 : 제가 쓰고 있어요 것은 간단 버전 있도록

vec1.erase(vec1.begin(),vec1.begin()+3); //removes first 3 elements 

독특한는 첫 번째 중복에 대한 포인터를 반환

vec1.erase(first duplicate, vec1.end()); 

해야 할 첫 번째 중복 된 후 나의 벡터 끝 ?

+3

cplusplus는 좋은 참조로 간주되지 않습니다. [cppreference] (http://en.cppreference.com/w/cpp/algorithm/unique)를 읽어보십시오. – ecatmur

답변

3

std::unique은 고유 한 요소를 제자리에서 제거하고 그 결과로 끝나는 포인터를 반환합니다. 예를 들어,

1 2 2 3 3 3 
^begin  ^end 

는 당신이 첫 번째 중복 요소의 반복자를 반환하지 std::adjacent_find, 생각하고

1 2 3 . . . (garbage) 
    ^resulting end 

된다.

관련 문제