/*
 *  Unique
 *
 */

template<class For> For unique(For first, For last);
template<class For, class BinPred> For unique(For first, For last, BinPred p);

template<class In, class Out> Out unique_copy(In first, In last, Out res);
template<class In, class Out, class BinPred>
        Out unique_copy(In first, In last, Out res, BinPred p);


/*
 *  Usage
 *
 */
  
void f(list<string>& ls, vector<string>& vs)
{
        ls.sort();      // list sort (_cont.splice_)
        unique_copy(ls.begin(),ls.end(),back_inserter(vs));
}


/*
 *  Possible implementation
 *
 */

template <class For> For unique(For first, For last)
{
        first = adjacent_find(first,last);      
        return unique_copy(first,last,first);
}