首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-04-24 
关于对“unique”的理解,求解!C/C++ code//根据“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;} 

热点排行