博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
STL中unique的用法
阅读量:5738 次
发布时间:2019-06-18

本文共 1843 字,大约阅读时间需要 6 分钟。

和上一篇remove,remove_if相同,unique也是algorithm中的方法,故使用时应包含该头文件。unique方法本意为去重(去除重复元素),但是功能限制为只能对附近相邻的元素进行比较,所以要和sort方法放在一起联合使用,才能实现其效果,否则如下面的代码中无序的排列并不能实现其去重的效果:

1 int main(int argc, char* argv[]) 2 { 3     std::vector
vec; 4 vec.push_back(6); 5 vec.push_back(2); 6 vec.push_back(3); 7 vec.push_back(4); 8 vec.push_back(8); 9 vec.push_back(12);10 vec.push_back(33);11 vec.push_back(4);12 vec.push_back(22);13 14 std::vector
::iterator iter;15 iter = std::unique(vec.begin(),vec.end());16 vec.erase(iter, vec.end());17 18 for (iter = vec.begin(); iter != vec.end(); iter++)19 {20 printf("%d\n",(*iter));21 }22 23 return 0;24 }

结果为:6  2  3  4  8  12  33  4  22 (9个元素)

如果加上sort排序:

1 int main(int argc, char* argv[]) 2 { 3     std::vector
vec; 4 vec.push_back(6); 5 vec.push_back(2); 6 vec.push_back(3); 7 vec.push_back(4); 8 vec.push_back(8); 9 vec.push_back(12);10 vec.push_back(33);11 vec.push_back(4);12 vec.push_back(22);13 14 std::sort(vec.begin(),vec.end());15 16 std::vector
::iterator iter;17 iter = std::unique(vec.begin(),vec.end());18 vec.erase(iter, vec.end());19 20 for (iter = vec.begin(); iter != vec.end(); iter++)21 {22 printf("%d\n",(*iter));23 }24 25 return 0;26 }

结果为:2  3  4  6  8  12  22  33(8个元素)

和remove类似,unique返回的也是要求去重范围区间中的最后一个元素的位置迭代器,故其后接的vec.erase(iter, vec.end());就是将找出的重复元素位置清空去除。

否则如过没有erase,那么返回的结果将是 2 3 4 6 8 12 22 33 33(9个元素),为什么队列里重复的本来是元素4,结果unique去重以后,反而使元素33重复了呢?

那是因为unique方法中调用的unique_copy方法的返回值是:An output iterator pointing to the end of the copied range.一个指向拷贝区间末端的迭代器指针。

这个拷贝区间就是我们unique方法中指定的传入参数去重区间。所以看到的是末尾的值元素33被拷贝了一次。

转载于:https://www.cnblogs.com/coolstand/archive/2012/09/24/2699760.html

你可能感兴趣的文章
Linux下磁盘保留空间的调整,解决df看到的空间和实际磁盘大小不一致的问题
查看>>
RSA 生成公钥、私钥对
查看>>
测试工具综合
查看>>
asp.net中调用COM组件发布IIS时常见错误 80070005解决方案
查看>>
分享一段ios数据库代码,包括对表的创建、升级、增删查改
查看>>
如何书写高质量的jQuery代码
查看>>
Activity的生命周期整理
查看>>
【记录】JS toUpperCase toLowerCase 大写字母/小写字母转换
查看>>
在 Linux 系统中安装Load Generator ,并在windows 调用
查看>>
Visifire charts ToolBar
查看>>
Mysql查询
查看>>
数据传输流程和socket简单操作
查看>>
利用广播实现ip拨号——示例
查看>>
ProbS CF matlab源代码(二分系统)(原创作品,转载注明出处,谢谢!)
查看>>
OC中KVC的注意点
查看>>
JQ入门(至回调函数)
查看>>
【洛天依】几首歌的翻唱(无伴奏)
查看>>
OpenSSL初瞻及本系列的博文的缘由
查看>>
ISO8583接口的详细资料
查看>>
tmux不自动加载配置文件.tmux.conf
查看>>