C++STL——unique函数总结

头文件:#include <iostream>

参数:和sort一样。两个参数——开始地址和结束地址(左闭右开)。

返回值:去重之后的尾地址!!!

作用:unique的作用是“去掉”容器中相邻元素的重复元素。

解析:unique实质上是一个伪去除,它并不是真正把重复的元素删除,而是用不重复的元素把重复的元素覆盖了,所以总长度其实是不变的。

(注意,网上有人说是把重复元素移动到末尾,其实并不是,因为如果只是移动的话每种元素的数量应该是不变的。)

用法:因为在去重之前要排序,所以一般与sort搭配。

int board[MAXN];

int N;
cin>>N;
for(int _=0 ; _<N ; _++)cin>>board[_];

sort(board,board+N);
int len = unique(board,board+N) - board;

如图:(这里可以发现7和8都比开始输入的多一个。)

因为unique返回的是去重之后的尾地址所以可以通过减去开始地址来得到去重后的长度。

int len = unique(board,board+N) - board;

还可以搭配vector来删除不要的数据。

int board[MAXN];

int N;
cin>>N;
for(int _=0 ; _<N ; _++)cin>>board[_];

sort(board,board+N);

vector<int>v (board, board + N);  
vector<int>::iterator it = unique (v.begin(), v.end() );  
v.erase (it, v.end() );//这里就是把后面藏起来的重复元素删除了  


另外如果是对结构体去重需要重载“==”。

 

转载于:https://www.cnblogs.com/vocaloid01/p/9514109.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值