lee-romantic 's Blog
Everything is OK!
Toggle navigation
lee-romantic 's Blog
主页
About Me
归档
标签
C++数组或者vector去重方式
2019-01-24 20:24:46
1536
0
0
lee-romantic
##(一)**`使用unique函数`** `unique`函数是一个去重函数,去除相邻中的重复元素(只留一个),返回的是去重后的**尾地址**。`unique`只是去除(相邻)的重复元素,因此,为了去除重复的元素,应该,首先对数组/Vector进行排序,这样保证重复元素在相邻的位置。 其中,最关键的是:`去除掉相邻重复元素之后,需要保持数组或vector总长度不变,因此最后几位不变`,网上很多人说是 `并不是删除并不是把重复的元素删除,而是全部放倒数组的后面`。实际上这是不对的. 例如,对于一个内容为`{2, 2, 5, 5, 6}`的`vector`,执行`unique`函数以后,vector大小并没有改变,而且并不是会变成{2, 5, 6, 2, 5},而是变成{`2,5,6,5,6`},并且函数的返回值为:3。 此时需要删除重复元素,只需要将后面的数据全部删除即可。 排序函数`sort`和去重函数`unique`都在`algorithm`头文件中。 例子: ``` vector<int> ivec = { 2, 2, 5, 5, 6 }; sort(ivec.begin(), ivec.end()); ivec.erase(unique(ivec.begin(), ivec.end()), ivec.end()); //unique(ivec.begin(), ivec.end()); //实践证明,可以看到,unique函数放到最后的并不是重复的元素,网上的很多都是扯淡 for (vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); iter++) { cout << *iter << " "; } ``` ##(2)**`使用set集合实现:`** 直接看例子吧,因为set集合是不允许有重复元素的,因此这样做也能去除掉重复的元素: ``` vector<int> ivec = { 2, 2, 5, 5, 6 }; set<int> st(ivec.begin(), ivec.end()); ivec.assign(st.begin(), st.end()); for (vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); iter++) { cout << *iter << " "; } ```
上一篇:
C++实现多线程
下一篇:
PyTorch里的requires_grad、volatile及no_grad
0
赞
1536 人读过
新浪微博
微信
腾讯微博
QQ空间
人人网
提交评论
立即登录
, 发表评论.
没有帐号?
立即注册
0
条评论
More...
文档导航
没有帐号? 立即注册