`Description`

`Description`

```
```Every time a consecutive group of duplicate elements appears in the range *[first, last)*, the algorithm *unique* removes all but the first element. That is, *unique* returns an iterator *new_last* such that the range *[first, new_last)* contains no two consecutive elements that are duplicates. [1] The iterators in the range *[new_last, last) *are all still dereferenceable, but the elements that they point to are unspecified. *Unique *is stable, meaning that the relative order of elements that are not removed is unchanged.

The reason there are two different versions of *unique* is that there are two different definitions of what it means for a consecutive group of elements to be duplicates. In the first version, the test is simple equality: the elements in a range *[f, l)* are duplicates if, for every iterator *i* in the range, either *i == f* or else **i == *(i-1)*. In the second, the test is an arbitrary Binary Predicate *binary_pred*: the elements in *[f, l)* are duplicates if, for every iterator *i* in the range, either *i == f* or else *binary_pred(*i, *(i-1))* is *true*. [2]