博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
std::unique实现
阅读量:5741 次
发布时间:2019-06-18

本文共 1328 字,大约阅读时间需要 4 分钟。

std::unique适用于将排过序的数据结构重复的部分全部放在结尾

但用的时候发现会将原先容器中的内容改掉,看了源码发现这个函数会将不重复的数据结构直接覆盖到前一个重复的位置上,下面看源码

该函数std::unique位于头文件<algorithm>声明1如下:

template< class ForwardIt >  ForwardIt unique( ForwardIt first, ForwardIt last );

声明2如下:

template< class ForwardIt, class BinaryPredicate >  ForwardIt unique( ForwardIt first, ForwardIt last, BinaryPredicate p );

该函数的作用为: 删除[first, last)之间所有连续重复的元素, 只保留一个。 注意, 是连续重复。 要删除所有重复的元素, 只需要排序之后, 然后调用这个函数即可实现。 第一个版本通过==判断是否重复, 第二个版本通过二元谓词p判断是否重复。 

 

二元谓词p, 就是binary predicate which returns ​true if the elements should be treated as equal. 

版本1的可能的实现方式:

template
ForwardIt unique(ForwardIt first, ForwardIt last) { if (first == last) return last; ForwardIt result = first; while (++first != last) { if (!(*result == *first)) { *(++result) = *first; } } return ++result; }

所一, 最终返回的一个迭代器指向任务结束的位置past the end.

版本二的实现方式:

template
ForwardIt unique(ForwardIt first, ForwardIt last, BinaryPredicate p) { if (first == last) return last; ForwardIt result = first; while (++first != last) { if (!p(*result, *first)) { *(++result) = *first; } } return ++result;

 

转载于:https://www.cnblogs.com/wangshaowei/p/9622350.html

你可能感兴趣的文章
OpenMediaVault 搭建git,ssh无法连接问题
查看>>
[WPF]使用WindowChrome自定义Window Style
查看>>
java多线程之:Java中的ReentrantLock和synchronized两种锁定机制的对比 (转载)
查看>>
mysql性能优化学习笔记-参数介绍及优化建议
查看>>
[Everyday Mathematics]20150105
查看>>
166.3. 容器
查看>>
1.6. Network
查看>>
【Web动画】SVG 实现复杂线条动画
查看>>
主流手机分辨率 尺寸 操作系统
查看>>
Office版本差别引发的语法问题
查看>>
使用Wireshark捕捉USB通信数据
查看>>
iOS - KVC 键值编码
查看>>
《树莓派渗透测试实战》——1.1 购买树莓派
查看>>
Apache Storm 官方文档 —— FAQ
查看>>
量化交易入门——数学模型应用于投机交易
查看>>
C++游戏系列4:杀伤距离有限制
查看>>
iOS 高性能异构滚动视图构建方案 —— LazyScrollView
查看>>
Java 重载、重写、构造函数详解
查看>>
【Best Practice】基于阿里云数加·StreamCompute快速构建网站日志实时分析大屏
查看>>
【云栖大会】探索商业升级之路
查看>>