关于对“unique”的理解,求解!该如何解决

关于对“unique”的理解,求解!
C/C++ code

//根据“unique只是把重复的元素放到容器的后面,而它本身会返回一个迭代器,指向这些元素的开始部分。”这句话
//把重复的元素提取出来
//
vector<string> vecStrInfo;
vecStrInfo.push_back( "1" );
vecStrInfo.push_back( "2" );
vecStrInfo.push_back( "3" );
vecStrInfo.push_back( "1" );
vecStrInfo.push_back( "4" );
vecStrInfo.push_back( "5" );
vecStrInfo.push_back( "6" );
vecStrInfo.push_back( "7" );
vecStrInfo.push_back( "8" );
vecStrInfo.push_back( "6" );

vector<string> vecReStrInfo;
sort( vecStrInfo.begin(), vecStrInfo.end() );
vector<string>::iterator repeat_start = unique( vecStrInfo.begin(),vecStrInfo.end() );
while ( repeat_start != vecStrInfo.end() )
{
    string strIP = (*repeat_start);
    vecReStrInfo.push_back( strIP );
    ++repeat_start;
}



最后提取出来的重复元素不是“1,6”而是“7,8”

是我哪里写错了么?

------解决方案--------------------
C/C++ code
#include <iostream>
#include <vector>
#include <iterator>
using namespace std;

template <class Iter>
vector<typename iterator_traits<Iter>::value_type> unique(Iter begin,Iter end,Iter &stop)
{
    typedef typename iterator_traits<Iter>::value_type value_type;
    vector<value_type> ret;
    Iter pre=begin,write;
    //1,1,3,4,5,5,6,7,7,9
    if(++begin==end)
    {
        stop=begin;
        return ret;
    }

    for(write=begin;begin!=end;++begin)
    {
        if(*begin==*pre)
        {
            ret.push_back(*begin);
        }
        else
        {
            *write=*begin;
            ++write;
        }
        pre=begin;
    }

    stop=write;

    return ret;
}

int main()
{
    vector<int> ret;

    int arr[10]=
    {
        1,1,3,4,5,5,6,7,7,9
    };

    int *stop;
    ret=unique(arr,arr+10,stop);

    for(int *s=arr;s!=stop;++s)
    {
        cout<<*s<<"  ";
    }

    cout<<endl;

    for(size_t i=0;i!=ret.size();++i)
    {
        cout<<ret[i]<<" "; 
    }

    cout<<endl;

    return 0;
}