读书人

unique()函数结果解决方案

发布时间: 2012-04-12 15:46:35 作者: rapoo

unique()函数结果
#include <numeric>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;


int main( )
{
vector <int> ivec;
ivec.push_back(6);
ivec.push_back(2);
ivec.push_back(5);
ivec.push_back(4);
ivec.push_back(2);
ivec.push_back(5);
vector<int>::iterator iter;
for(iter=ivec.begin();iter!=ivec.end();iter++)
cout<<*iter<<" ";
cout<<" the 1"<<endl;
cout<<endl;

sort(ivec.begin(),ivec.end());
for(iter=ivec.begin();iter!=ivec.end();iter++)
cout<<*iter<<" ";
cout<<" the 2"<<endl;

unique(ivec.begin(),ivec.end());
for(iter=ivec.begin();iter!=ivec.end();iter++)
cout<<*iter<<" ";
cout<<" the 3"<<endl;
cout<<endl;
return 0;
}

结果:unique()后的输出(2 4 5 6 5 6)为什么有错?
unique()输出应该是怎样:2 4 5 6 5 2还是应该是2 4 5 6 2 5 ???

[解决办法]
函数不会用就百度或者google
unique() 前面的数是唯一,后面的部分是随机的(但都是前面的数)
[解决办法]
你再多插入几个数,看看结果就有体会了
[解决办法]
unique(ivec.begin(),ivec.end())
=>
remove(unique(ivec.begin(),ivec.end()),ivec.end());
对于vector,unique并没有删除数据,只是将重复数据移到最后。

[解决办法]
对vector sort之后成了 2 2 4 5 5 6,unique只是将相同的成员向前移位,直接覆盖前一个位置,返回的是新的end,后面没有覆盖的数据保持不变,因为unique之后的容器就成了 2 4 5 6 5 6(最后2个数不变,而不是所谓的随机数)

读书人网 >C++

热点推荐