C++의 STL인 std::unique의 작동 원리가 잘 이해가 되지 않아서 작성.
unique의 작동 코드

기본적으로 unique()는 배열에서 연속되는 중복 값을 덮어씌우는 방식으로 제거합니다. 그렇기 때문에 배열 전체에서 중복되는 모든 값을 제거하기 위해서는 sort()를 해야합니다.
코드를 보면 3개의 포인터가 있습니다. first와 result는 배열의 시작 위치를 가르키고, last는 배열의 마지막 원소의 다음을 가르키고 있습니다.
if(!(*result == *first))
위 조건은 연속되는 두개의 값이 서로 같은지를 검사합니다. 만약 두개의 값이 서로 같다면 그대로 진행합니다. 그러다 *result != *first인 위치에 first 포인터가 도달한다면 조건문이 true가 되겠죠.
그러면 result는 한 칸 앞으로 이동하여 해당 칸을 *first로 덮어씌우기 합니다. 글로만 보면 이해가 잘 안될 수 있으니 그림으로 보겠습니다.

초기 상태입니다.

++first로 인해 first가 한 칸 앞으로 이동했습니다. result와 first의 값이 같으니 그대로 진행합니다.

first가 한 칸 앞으로 이동했고 result가 가르키는 칸과 값이 서로 다릅니다. 조건문이 true가 되어 result에 first의 값을 덮어씌웁니다.


똑같은 방식으로 result칸을 계속해서 덮어씌워줍니다.

마지막으로 first == last가 되었습니다. while문의 조건에 위배되므로 while문이 종료되고 ++result를 리턴합니다. 그림에서 보이는 나머지 5,7,7은 의미 없는 값입니다.
return 된 result는 중복이 제거된 배열의 끝을 가르키며 사용자는 erase나 resize등의 함수를 써서 중복이 제거된 배열을 얻을 수 있습니다.