首先更正对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详解相关推荐

  1. c语言 标准库 定时器,C中的标准库函数time函数详解

    C语言中的标准库函数包括一系列日期和时间处理函数,它们都在头文件中说明.下面列出了这些函数.在头文件中定义了三种类型:time_t,struct tm和clock_t. 在头文件中说明的C语言时间函数 ...

  2. c/c++ 标准库 插入迭代器 详解

    标准库 插入迭代器 详解 插入迭代器作用:copy等函数不能改变容器的大小,所以有时copy先容器是个空的容器,如果不使用插入迭代器,是无法使用copy等函数的. 例如下面的代码就是错误的: list ...

  3. 【转】C++11 并发指南五(std::condition_variable 详解)

    http://www.cnblogs.com/haippy/p/3252041.html 前面三讲<C++11 并发指南二(std::thread 详解)>,<C++11 并发指南三 ...

  4. bind() c语言,c/c++ 标准库 bind 函数详解

    bind函数定义在头文件 functional 中.可以将 bind 函数看作一个通用的函数适配器,它接受一个可调用对象,生成一个新的可调用对象来"适应"原对象的参数列表. bin ...

  5. C++11 并发指南五(std::condition_variable 详解)

    前面三讲<C++11 并发指南二(std::thread 详解)>,<C++11 并发指南三(std::mutex 详解)>分别介绍了 std::thread,std::mut ...

  6. C++11 并发指南------std::thread 详解

    参考: https://github.com/forhappy/Cplusplus-Concurrency-In-Practice/blob/master/zh/chapter3-Thread/Int ...

  7. c语言中bind函数,c/c++ 标准库 bind 函数详解

    bind函数定义在头文件 functional 中.可以将 bind 函数看作一个通用的函数适配器,它接受一个可调用对象,生成一个新的可调用对象来"适应"原对象的参数列表. bin ...

  8. C++11 并发指南三(std::mutex 详解)

    上一篇<C++11 并发指南二(std::thread 详解)>中主要讲到了 std::thread 的一些用法,并给出了两个小例子,本文将介绍 std::mutex 的用法. Mutex ...

  9. c++ std::move详解

    c++ std::move详解 在移动构造中的时候,移动拷贝其实就是把原来参数对象的指针地址给到了构造的对象,再把原先对象的指针置为NULL,这样内存就不会被原来函数给析构了.对于实体的对象执行的其实 ...

最新文章

  1. 大数据处理的关键架构
  2. 初探 Headless Chrome
  3. Linux acl权限
  4. 利用QT实现X轴为时间动态显示曲线
  5. (25)2-9-9-12分页(下)
  6. C# 方法返回值的个数
  7. 《论文笔记》Experimental Research on Cooperative vSLAM for UAVs
  8. (19)FPGA面试题设计前端流程
  9. Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed betwee...
  10. hdu 1686(标准的kmp,可当模板)
  11. arcgis图层叠加不匹配
  12. 电脑主机前置耳机插孔没声音——解决办法
  13. nginx反向代理nexus3
  14. 计算机科学ppt模板,计算机科学与技术ppt模板
  15. 生物统计分析之主成分分析(PCA)
  16. 真正了解gets() fgets() getc() fgetc()的区别
  17. TMS320F28374芯片简介
  18. UNCTF 2022 部分WP
  19. php 小程序即时聊天,网易云IM小程序聊天室集成。PHP版SDK API使用示例
  20. 服务器合租与虚拟主机的区别

热门文章

  1. 词根venge/vent/ver/verb/vers等衍生单词
  2. php修改css文件后缀,css样式表文件的扩展名是什么
  3. Delphi 中 InputQuery 实现密码输入
  4. std::uniform_real_distribution的一个bug引发的服务器崩溃
  5. 计算机二级excel常考的知识点,计算机二级MS Office考试Excel部分常考函数总结
  6. hadoop常见问题总结
  7. 携程919激发“涟漪效应” 助商家非活动商品下单GMV超2亿增长300%
  8. 一个贴近实际的原型链继承的列子
  9. 灰度共生矩阵(GLCM)
  10. 基于R语言的seasonal包使用手册_目录_链接(update20220625_10.)