一、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没有返回值,不能直接得出有几个不重复元素。

最新文章

  1. 详解三种缓存过期策略LFU,FIFO,LRU(附带实现代码)
  2. php : 基础(1)
  3. 成为 Web 开发大师你必须知道的 7 件事情
  4. malloc_free_new_delete
  5. Tomcat常用的优化技巧
  6. error: insufficient permissions for device: verify udev rules
  7. JavaScript调试技巧之console.log()详解
  8. 国内外CDN服务商CNAME特征串调研
  9. Chp14: Java
  10. sql时间段算法
  11. hduAnother Graph Game
  12. GCC扩展 __attribute__ ((visibility(&quot;hidden&quot;)))
  13. asp.net MVC漏油配置总结
  14. 微信小程序之----接口调用方式
  15. ffmpeg 在windows 上编译
  16. Oracle 12c SQL Developer连接报错(ORA-12505)
  17. RHEL7.3安装python3.6.1
  18. java实现读取ftp服务器上的csv文件
  19. linux shell 脚本攻略学习13--file命令详解,diff命令详解
  20. 关于Unity中的模型描边与Shader切换(专题二)

热门文章

  1. 使用Graphlab参加Kaggle比赛(2017-08-20 发布于知乎)
  2. Python模块——HashLib(摘要算法)与base64
  3. notepad 写html乱码,已解决
  4. hive concat_ws源代码
  5. 盘一盘 NIO (二)—— Channel解析
  6. urllib.request.urlretrieve()用于下载制定url内容到本地
  7. 关于事务,事务的特性,spring事务的传播特性
  8. HTML5 storage事件监听
  9. Liunx学习总结(七)--系统状态查看和统计
  10. python 实现多个线程间消息队列传递,一个简单的列子