关于对“unique”的理解,求解!该如何解决
关于对“unique”的理解,求解!
最后提取出来的重复元素不是“1,6”而是“7,8”
是我哪里写错了么?
------解决方案--------------------
- 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; }