#include<iostream>
#include<list>
#include<set>
#include<numeric>
#include<iterator>
#include<algorithm>
using namespace std;
void main()
{
list<int>l;
list<int>l_Result;
l.push_back(1);
l.push_back(2);
l.push_back(2);
l.push_back(4);
l.push_back(4);
l.push_back(90);
l.push_back(8);
l.push_back(2);
l.sort();
cout<<"原始链表是:"<<endl;
copy(l.begin(),l.end(),ostream_iterator<int>(cout,"\t"));
cout<<endl;
multiset<int>myset(l.begin(),l.end());
pair<multiset<int>::iterator ,multiset<int>::iterator >range;
cout<<"装入set后:"<<endl;
copy(myset.begin(),myset.end(),ostream_iterator<int>(cout,"\t"));
cout<<endl;
multiset<int>::iterator it=myset.begin();
while(it!=myset.end())
{
int count=myset.count(*it);
if(count>1)
{
range=myset.equal_range(*it);
int n=accumulate(range.first,range.second,0);
l_Result.push_back(n);
myset.erase(range.first,range.second);
it=myset.begin(); //关键一句。
}
else
{
it++;
}
}
cout<<"accumulate l_Result:"<<endl;
copy(l_Result.begin(),l_Result.end(),ostream_iterator<int>(cout,"\t"));
cout<<endl;
cout<<"multiset 去除重复后:"<<endl;
copy(myset.begin(),myset.end(),ostream_iterator<int>(cout,"\t"));
cout<<endl;
for(it=myset.begin();it!=myset.end();it++)
{
l_Result.push_back(*it);
}
cout<<"最终结果是:"<<endl;
copy(l_Result.begin(),l_Result.end(),ostream_iterator<int>(cout,"\t"));
cout<<endl;
system("pause");
}