关于对“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;}