C++ 标准库函数std::unique详解
首先更正对unique的错误认知
unique
函数并不是将所有的重复元素都挪到容器最后。
unique
源码
版本一:
template<class ForwardIt>
ForwardIt unique(ForwardIt first, ForwardIt last)
{if (first == last)return last;ForwardIt result = first;while (++first != last)if (!(*result == *first) && ++result != first)*result = std::move(*first);return ++result;
}
版本二:
template<class ForwardIt, class BinaryPredicate>
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)*result = std::move(*first);return ++result;
}
版本二比版本一多一个参数,这个参数是可调用对象,可用于判断自定义类型是否相等,其他无差别。
分析源码就能知道,unique
函数从前往后扫描容器,如果发现了两个重复的元素A、B,A、B的值都一样,就立即用AB后面紧接着的一个元素C覆盖B,以此类推,直至扫描完整个容器。
C++ 标准库函数std::unique详解相关推荐
- c语言 标准库 定时器,C中的标准库函数time函数详解
C语言中的标准库函数包括一系列日期和时间处理函数,它们都在头文件中说明.下面列出了这些函数.在头文件中定义了三种类型:time_t,struct tm和clock_t. 在头文件中说明的C语言时间函数 ...
- c/c++ 标准库 插入迭代器 详解
标准库 插入迭代器 详解 插入迭代器作用:copy等函数不能改变容器的大小,所以有时copy先容器是个空的容器,如果不使用插入迭代器,是无法使用copy等函数的. 例如下面的代码就是错误的: list ...
- 【转】C++11 并发指南五(std::condition_variable 详解)
http://www.cnblogs.com/haippy/p/3252041.html 前面三讲<C++11 并发指南二(std::thread 详解)>,<C++11 并发指南三 ...
- bind() c语言,c/c++ 标准库 bind 函数详解
bind函数定义在头文件 functional 中.可以将 bind 函数看作一个通用的函数适配器,它接受一个可调用对象,生成一个新的可调用对象来"适应"原对象的参数列表. bin ...
- C++11 并发指南五(std::condition_variable 详解)
前面三讲<C++11 并发指南二(std::thread 详解)>,<C++11 并发指南三(std::mutex 详解)>分别介绍了 std::thread,std::mut ...
- C++11 并发指南------std::thread 详解
参考: https://github.com/forhappy/Cplusplus-Concurrency-In-Practice/blob/master/zh/chapter3-Thread/Int ...
- c语言中bind函数,c/c++ 标准库 bind 函数详解
bind函数定义在头文件 functional 中.可以将 bind 函数看作一个通用的函数适配器,它接受一个可调用对象,生成一个新的可调用对象来"适应"原对象的参数列表. bin ...
- C++11 并发指南三(std::mutex 详解)
上一篇<C++11 并发指南二(std::thread 详解)>中主要讲到了 std::thread 的一些用法,并给出了两个小例子,本文将介绍 std::mutex 的用法. Mutex ...
- c++ std::move详解
c++ std::move详解 在移动构造中的时候,移动拷贝其实就是把原来参数对象的指针地址给到了构造的对象,再把原先对象的指针置为NULL,这样内存就不会被原来函数给析构了.对于实体的对象执行的其实 ...
最新文章
- 大数据处理的关键架构
- 初探 Headless Chrome
- Linux acl权限
- 利用QT实现X轴为时间动态显示曲线
- (25)2-9-9-12分页(下)
- C# 方法返回值的个数
- 《论文笔记》Experimental Research on Cooperative vSLAM for UAVs
- (19)FPGA面试题设计前端流程
- Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed betwee...
- hdu 1686(标准的kmp,可当模板)
- arcgis图层叠加不匹配
- 电脑主机前置耳机插孔没声音——解决办法
- nginx反向代理nexus3
- 计算机科学ppt模板,计算机科学与技术ppt模板
- 生物统计分析之主成分分析(PCA)
- 真正了解gets() fgets() getc() fgetc()的区别
- TMS320F28374芯片简介
- UNCTF 2022 部分WP
- php 小程序即时聊天,网易云IM小程序聊天室集成。PHP版SDK API使用示例
- 服务器合租与虚拟主机的区别
热门文章
- 词根venge/vent/ver/verb/vers等衍生单词
- php修改css文件后缀,css样式表文件的扩展名是什么
- Delphi 中 InputQuery 实现密码输入
- std::uniform_real_distribution的一个bug引发的服务器崩溃
- 计算机二级excel常考的知识点,计算机二级MS Office考试Excel部分常考函数总结
- hadoop常见问题总结
- 携程919激发“涟漪效应” 助商家非活动商品下单GMV超2亿增长300%
- 一个贴近实际的原型链继承的列子
- 灰度共生矩阵(GLCM)
- 基于R语言的seasonal包使用手册_目录_链接(update20220625_10.)