STL中的unique和unique_copy函数
一、unique函数
这个函数的功能就是删除相邻的重复元素,然后重新排列输入范围内的元素,并返回一个最后一个无重复值的迭代器(并不改变容器长度)。
例如:
vector<int>q();
for(int i = ; i < ; i++){
q[i] = (i*i + i*i*i) % ;
cout << q[i] << " ";
}
cout << endl;
sort(q.begin(),q.end()); for(int i = ; i < ; i++)
cout << q[i] << " ";
cout << endl; int tot = unique(q.begin(),q.end()) - q.begin(); for(int i = ; i < ; i++)
cout << q[i] << " "; cout << endl;
cout << tot << endl;
运行结果为

unique返回的是迭代器,但我们减去容器首位置就可以得到无重复的长度了。还有就是使用unique函数前得排序(或者保证容器是有序的),因为它往相邻位置查找有无重复,unique函数完全等价于下面这个函数。
iterator My_Unique (iterator first, iterator last){
if (first==last) return last;
iterator result = first;
while (++first != last){
if (!(*result == *first))
*(++result)=*first;
}
return ++result;
}
可以看的出unique的工作流程是吧不重复的元素往前移,并不是把重复元素往后移动,还有就是记得使用unique一定要保证有序!
知道了unique函数就可以利用这个函数做很多事情了,比如和erase函数达到删除重复元素的目的等等。
二、unique_copy
功能和unique一样,但是多了一个copy,函数有三个参数,首位置、末位置和另一个容器,例如:
vector<int>q(),vec;
for(int i = ; i < ; i++){
q[i] = (i*i + i*i*i) % ;
cout << q[i] << " ";
}
cout << endl;
sort(q.begin(),q.end()); for(int i = ; i < ; i++)
cout << q[i] << " ";
cout << endl; unique_copy(q.begin(),q.end(),back_inserter(vec)); for(int i = ; i < ; i++)
cout << q[i] << " ";
cout << endl; for(vector<int>::iterator it = vec.begin(); it != vec.end(); it++){
cout << *it << " ";
}
cout << endl;
运行结果为

可以发现,函数操作是拷贝到另一个容器中了,并不改变当前容器的元素顺序。
值得一提的就是unique_copy没有返回值,不能直接得出有几个不重复元素。
STL中的unique和unique_copy函数的更多相关文章
- C++STL中的unique函数解析
一.总述 unique函数属于STL中比较常用函数,它的功能是元素去重.即”删除”序列中所有相邻的重复元素(只保留一个).此处的删除,并不是真的删除,而是指重复元素的位置被不重复的元素给占领了(详细情 ...
- STL中的unique()和lower_bound ,upper_bound
unique(): 作用:unique()的作用是去掉容器中相邻元素的重复元素(数组可以是无序的,比如数组可以不是按从小到大或者从大到小的排列方式) 使用方法:unique(初始地址,末地址): 这里 ...
- C++STL中的unique函数
头文件:#include<iostream> 函数原型:iterator unique(iterator it_1,iterator it_2); 作用:元素去重,即”删除”序列中所有相邻 ...
- 数据离散化 ( 以及 stl 中的 unique( ) 的用法 )+ bzoj3289:Mato的文件管理
http://blog.csdn.net/gokou_ruri/article/details/7723378 ↑惯例Mark大神的博客 bzoj3289:Mato的文件管理 线段树求逆序对+莫队 ...
- 记录 C++ STL 中 一些好用的函数--持续更新 (for_each,transform,count_if,find_if)
在日常的编程中,有这么几种操作还是比较常见的: 把一组数据都赋值成一个数,在一组数据中查找一个数,统计一组数据中符合条件的数等等. 一般的写法可以用循环,没有什么是循环不能搞定的.假如在这里怎么用介绍 ...
- 『嗨威说』算法设计与分析 - STL中Sort函数的实现原理初探
本文索引目录: 一.对Sort算法实现的个人阅读体会 二.Sort算法使用的三个排序算法的优点介绍 2.1 插入排序的优缺点 2.2 堆排序的优缺点 2.3 快速排序的优缺点 2.4 新的结合排序—— ...
- STL Algorithms 之 unique
C++的文档中说,STL中的unique是类似于这样实现的: template <class ForwardIterator> ForwardIterator unique ( Forwa ...
- STL中的二分查找———lower_bound,upper_bound,binary_search
关于STL中的排序和检索,排序一般用sort函数即可,今天来整理一下检索中常用的函数——lower_bound , upper_bound 和 binary_search . STL中关于二分查找的函 ...
- STL中的二分查找
本文转载于https://blog.csdn.net/riba2534/article/details/69240450 使用的时候注意:必须用在非递减的区间中 二分查找的原理非常简单,但写出的代码中 ...
随机推荐
- Javascript中将数字转换为中文的方法
//js实现将数字1234转化为汉字字符串(一千二百三十四)(或大写汉字壹仟贰佰叁拾肆): /*阿拉伯数字转中文数字 中文数字的特点: 每个计数数字都跟着一个权位,权位有:十.百.千.万.亿. 以“万 ...
- MyBatis的parameterType传入参数类型
在mybatis映射接口的配置中,有select,insert,update,delete等元素都提到了parameterType的用法,parameterType为输入参数,在配置的时候,配置相应的 ...
- 【JVM从小白学成大佬】4.Java虚拟机何谓垃圾及垃圾回收算法
在Java中内存是由虚拟机自动管理的,虚拟机在内存中划出一片区域,作为满足程序内存分配请求的空间.内存的创建仍然是由程序猿来显示指定的,但是对象的释放却对程序猿是透明的.就是解放了程序猿手动回收内存的 ...
- odoo视图中常用widget
widget="statusbar" 头部状态条标签 widget="email" 电子邮件地址标签 widget="selection" ...
- Spring Cloud Zuul的动态路由怎样做?集成Nacos实现很简单
一.说明 网关的核心概念就是路由配置和路由规则,而作为所有请求流量的入口,在实际生产环境中为了保证高可靠和高可用,是尽量要避免重启的,所以实现动态路由是非常有必要的:本文主要介绍实现的思路,并且以Na ...
- Leetcode之二分法专题-287. 寻找重复数(Find the Duplicate Number)
Leetcode之二分法专题-287. 寻找重复数(Find the Duplicate Number) 给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 ...
- Github资源下载
自己收集的一些日常使用软件.编程书籍以及自己动手实践的程序,欢迎下载. 收集维护不易,喜欢请Star或Fork支持呀,(^-^)V. 所有资源均自己制作或收集自网络,如有侵权请联系删除. 友情链接 G ...
- 浏览 GitHub 太卡了?教你两招!
老实说,GitHub 在国内的使用体验并不算太好,这其中最大的原因就是网络了. GitHub 访问起来比较卡,这个看起来貌似无解.国内的 gitee 网速倒是可以,但是无法代替 GitHub,个人感觉 ...
- 转载-Springboot整合ehcache缓存
转载:https://www.cnblogs.com/xzmiyx/p/9897623.html EhCache是一个比较成熟的Java缓存框架,最早从hibernate发展而来, 是进程中的缓存系统 ...
- 借助 RAM disk 技术,加快前端工程打包速度
背景以 Jenkins 服务器为例,在构建内部的这个项目时,CE 每部署一次服务,最快 6 分钟,最慢将近 13 分钟左右.遇到多个项目并发打包会因为资源占用等问题时间会延长,甚至出现过几次 20 分 ...