关于去重的方法,unique函数的运用讨论

本文讲述了如何在C++中使用unique函数对vector和数组进行去重,包括排序的重要性,sort函数的正确使用以及unique函数与erase配合的注意事项。作者分享了解决过程中的问题与解决方法。
摘要由CSDN通过智能技术生成

unique函数需要包含头文件
unique函数只能对有序数组进行去重操作,所以一般要先进行排序,使用sort函数;

一.unique函数对vector进行去重操作:
代码如下:
请添加图片描述

对于一个容器进行去重操作,结合erase和unique,在网上学习的时候我的笔记里写的是a.erase(unique(a.begin(),a.end()),a.end());可是我在实验的时候却发现这样子打下来却没有得到我想要的去重效果,具体原因我也不清楚,于是我将代码改成了a.erase(unique(a.begin(),a.begin()+5),a.end());这样之后还需要遍历输出去重后的容器内容,这时就需要理解erase的作用,它并不是真的去除,而是将重复的数移到容器的最后面,这样一来最后输出的数就会比原来少,那么最后的for循环遍历时就不能<5了,所以我用了一个循环来判断有序数组中相邻两项相等的个数有多少,从而确定最后需要遍历到第几位。这样一来就可以做到去重的效果了。
二.unique函数对数组进行去重:
代码如下:
请添加图片描述
对数组进行去重时,可以直接用unique(b,b+5)-b得到去重后有多少数,然后直接进行输出即可。如果没有写-b的话就会出现报错 [Error] invalid conversion from ‘int*’ to ‘int’ [-fpermissive]

该过程中所遇到的问题:
1、最开始是没有写sort函数进行排序,导致unique没有效果,因为unique是对相邻的数进行的操作所以要作用在有序数组中
2、写入sort函数后却发现仍然没有作用,经过修改之后发现是sort里面的迭代器使用出错,sort(a.begin(),a.end());所得到的结果没有排序,需要写成sort(a.begin(),a.begin()+5);之后才有排序的效果
3、最后遇到的问题就是unique函数与vector的结合要写成a.erase(unique(a.begin(),a.begin()+5),a.end());然后才能实现去重的功能

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值