STL中的unique和unique_copy函数
2024-09-01 07:31:40
一、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没有返回值,不能直接得出有几个不重复元素。
最新文章
- 详解三种缓存过期策略LFU,FIFO,LRU(附带实现代码)
- php : 基础(1)
- 成为 Web 开发大师你必须知道的 7 件事情
- malloc_free_new_delete
- Tomcat常用的优化技巧
- error: insufficient permissions for device: verify udev rules
- JavaScript调试技巧之console.log()详解
- 国内外CDN服务商CNAME特征串调研
- Chp14: Java
- sql时间段算法
- hduAnother Graph Game
- GCC扩展 __attribute__ ((visibility(";hidden";)))
- asp.net MVC漏油配置总结
- 微信小程序之----接口调用方式
- ffmpeg 在windows 上编译
- Oracle 12c SQL Developer连接报错(ORA-12505)
- RHEL7.3安装python3.6.1
- java实现读取ftp服务器上的csv文件
- linux shell 脚本攻略学习13--file命令详解,diff命令详解
- 关于Unity中的模型描边与Shader切换(专题二)
热门文章
- 使用Graphlab参加Kaggle比赛(2017-08-20 发布于知乎)
- Python模块——HashLib(摘要算法)与base64
- notepad 写html乱码,已解决
- hive concat_ws源代码
- 盘一盘 NIO (二)—— Channel解析
- urllib.request.urlretrieve()用于下载制定url内容到本地
- 关于事务,事务的特性,spring事务的传播特性
- HTML5 storage事件监听
- Liunx学习总结(七)--系统状态查看和统计
- python 实现多个线程间消息队列传递,一个简单的列子