编了一个小程序,对STL算法中的sort()和unique()进行了测试,发现unique()输出结果不正确。程序如下:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
int array[8]={1,5,4,5,3,100,2,100};
vector<int> ivec(array,array+8);
cout<<"元素数据"<<endl;
for(vector<int>::iterator iter=ivec.begin();iter!=ivec.end();++iter)
cout<<*iter<<'\t';
cout<<endl;
sort(ivec.begin(),ivec.end());
cout<<"经sort()排序后"<<endl;
for(vector<int>::iterator iter=ivec.begin();iter!=ivec.end();++iter)
cout<<*iter<<'\t';
cout<<endl;
cout<<"经unique()排序后"<<endl;
vector<int>::iterator it=unique(ivec.begin(),ivec.end());
for(vector<int>::iterator iter=ivec.begin();iter!=ivec.end();++iter)
cout<<*iter<<'\t';
cout<<endl;
cout<<"输出重复数字"<<endl;
for(vector<int>::iterator iter=it;iter!=ivec.end();++iter)
cout<<*iter<<'\t';
cout<<endl;
return 0;
}
程序结果如下:
重复数字应该是5好和100,但结果怎么只剩100了?
int array[8] = { 1, 5, 4, 5, 3, 100, 2, 100 };
vector<int> ivec(array, array + 8);
cout << "元素数据" << endl;
for (vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); ++iter)
cout << *iter << '\t';
cout << endl;
sort(ivec.begin(), ivec.end());
cout << "经sort()排序后" << endl;
for (vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); ++iter)
cout << *iter << '\t';
cout << endl;
cout << "经unique()排序后" << endl;
vector<int>::iterator it = unique(ivec.begin(), ivec.end());
ivec.erase(it, ivec.end());
for (vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); ++iter)
cout << *iter << '\t';
cout << endl;
//cout << "输出重复数字" << endl;
//for (vector<int>::iterator iter = it; iter != ivec.end(); ++iter)
// cout << *iter << '\t';
//cout << endl;
return 0;