关于迭代器“去重”的问题(求解篇)
#include<iostream>#include<vector>using namespace std;int main(){ int s[]={1,2,4,5,6,7,8,2,4,5,10,18}; vector<int> T(s,s+12); for(vector<int>::iterator i=T.begin();i!=T.end();++i) { for(vector<int>::iterator j=i;j!=T.end();++j) if(*i==*(j+1)) { T.erase(j+1); } } for(vector<int>::iterator k=T.begin();k!=T.end();++k) cout<<*k<<" ";}#include "stdafx.h"#include<iostream>#include<vector>using namespace std;int main(){ int s[]={1,2,4,5,6,7,8,2,4,5,10,18}; vector<int> T(s,s+12); for(vector<int>::iterator i=T.begin();i!=T.end();++i) { for(vector<int>::iterator j=i+1;j!=T.end();++j)//j=i+1是在刚进入for循环的时候,只会赋值一 if(*i==*j) //是为了防止像你那样写出现j等于end前一个迭 { //代器,进入循环后对指向end的迭代器解引 j = T.erase(j); //用([color=#FF0000]就是这里*(j+1[/color])) } } for(vector<int>::iterator k=T.begin();k!=T.end();++k) cout<<*k<<" ";}
[解决办法]
template<class TYPE>void DeleteRepeat(std::vector<TYPE>& vec){ std::vector<TYPE> vecRet; std::set<TYPE> setTemp; for (std::vector<TYPE>::iterator iter = vec.begin();iter != vec.end();++iter) { if (setTemp.find(*iter) == setTemp.end()) { vecRet.push_back(*iter); setTemp.insert(*iter); } } vec.swap(vecRet);}