unique函数 (STL)
转自http://www.cnblogs.com/heyonggang/archive/2013/08/07/3243477.html
类属性算法unique的作用是从输入序列中“删除”所有相邻的重复元素。
该算法删除相邻的重复元素,然后重新排列输入范围内的元素,并且返回一个迭代器(容器的长度没变,只是元素顺序改变了),表示无重复的值范围得结束。

1 // sort words alphabetically so we can find the duplicates
2 sort(words.begin(), words.end());
3 /* eliminate duplicate words:
4 * unique reorders words so that each word appears once in the
5 * front portion of words and returns an iterator one past the
6 unique range;
7 * erase uses a vector operation to remove the nonunique elements
8 */
9 vector<string>::iterator end_unique = unique(words.begin(), words.end());
10 words.erase(end_unique, words.end());

在STL中unique函数是一个去重函数, unique的功能是去除相邻的重复元素(只保留一个),其实它并不真正把重复的元素删除,是把重复的元素移到后面去了,然后依然保存到了原数组中,然后 返回去重后最后一个元素的地址,因为unique去除的是相邻的重复元素,所以一般用之前都会要排一下序。 |
若调用sort后,vector的对象的元素按次序排列如下:
sort jumps over quick red red slow the the turtle
则调用unique后,vector中存储的内容是:
注意,words的大小并没有改变,依然保存着10个元素;只是这些元素的顺序改 变了。调用unique“删除”了相邻的重复值。给“删除”加上引号是因为unique实际上并没有删除任何元素,而是将无重复的元素复制到序列的前段, 从而覆盖相邻的重复元素。unique返回的迭代器指向超出无重复的元素范围末端的下一个位置。
获得不重复元素个数 : int c = unique(words.begin(), words.end())-words.begin();
注意:算法不直接修改容器的大小。如果需要添加或删除元素,则必须使用容器操作。
example:

1 #include <iostream>
2 #include <cassert>
3 #include <algorithm>
4 #include <vector>
5 #include <string>
6 #include <iterator>
7 using namespace std;
8
9 int main()
10 {
11 //cout<<"Illustrating the generic unique algorithm."<<endl;
12 const int N=11;
13 int array1[N]={1,2,0,3,3,0,7,7,7,0,8};
14 vector<int> vector1;
15 for (int i=0;i<N;++i)
16 vector1.push_back(array1[i]);
17
18 vector<int>::iterator new_end;
19 new_end=unique(vector1.begin(),vector1.end()); //"删除"相邻的重复元素
20 assert(vector1.size()==N);
21
22 vector1.erase(new_end,vector1.end()); //删除(真正的删除)重复的元素
23 copy(vector1.begin(),vector1.end(),ostream_iterator<int>(cout," "));
24 cout<<endl;
25
26 return 0;
27 }

运行结果为:
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAowAAABVCAIAAABM/yJPAAAM30lEQVR4nO2d25NUxR3H539IDJUUVUkKH9SHVFGWCopcRMNySbioiIAuyn1Z7riIyCWiJhguwbAriEm85PKAhgAuIRDixqjchNwqL/wHPGxVqpaHVPJw8vA79Onp7tPT58ycmbM7n099y+rp6dNnZhb2w6/7zLFyEwAAAEpJZfzKj4rLg6vs/Fby0OrUTOhSOWHk4TWpmdh9YmL375yZtNaZk5PWnpy89uTkde5MWXdyyno9p1QeWX/qkQ3uTN1waurGU1M3nrbz6MbTj25y5uPHNn382GZ3vivZoqdfMk3ygiMdkp7+jp4zRqZLtjoyY+uZGVt/P+NFR2ZKthk5O3Pb2VmSlxz5nsp2yR9Uvq/yspnZcc7N3mFmjspOI+fnquwyM09lt8ofJY/r+UFVnkhy4YlXqvKknj1Vmb/nwvw9f4rzalWe0vOayidPvfbJAj2vV+VpIz8cUFlo5EdJFsX5c5y9SRYbeUPl02eM/DjJs0b2ffrsvr9IOo3sT7IkyWdxDsR5zs7BOM8f/Oz5g59X5Sdxlto59PnSQ18sPfTFMjtvxllelYvL37y4/KdxVjhz+OKKwxdXxrlUld5LK3svrXKm79KqvsurnXnr8uq3Lnc5cqXryJWuI1fWOHP0ypqjV7qTXE3y9tXut6+uTcuxq+uOXV137EtH3vlyvTvX1v/s2oa0/PzaxqpcT/KL65vS8u71zXH+amfLe2n52wvvp6bnAzt/l2z9ZWpe/JXKP4xs+3VqXvrNP8sQJI2kkTSSRtJIGkkjaSSNpJE0kkbSSHpYSTrKQm9vb9bxNc+iSXrFhw8sP/7A8g9r5fi4FceRNJJG0kgaSSPpdpD0raHBkPT13xBJZxpf8yyJpEfP7fvO6jNju86NXX3Wzv1rz9/Xff7+9RceXHPi2/MOjV38DpJG0kgaSSNpJN0Okg65wkuXdPj4mmdJJH3Hln+N2vfvUW8M2vna3sFFp/87+6P/dZ7+T9+BD8Yvfu/rEzfbStYr9KySlqOQtF/S8ikh6XaTtPzcR7yk5W2GSFpGtkrScvYWSlr/TYukyynpipeckp66+d2xCzfc+0yPM+M7e8Z19ozv7JnybPc9c14d9dDamoY2OqMoyiRp49jSStreQlCSvv3wtP5QaJSk7bMrScvDFkpaf1XhklaHzH75XNLecW72jvhhoyStv7yakjY+5HySVocrSccPs0va/rmnSdoYllvScnjzJa2/eI+kjbfpkbQa01hJ62cvVNL6iaikR6Sk9TFVkp40c6l/XsVX7547evKmmpKWthTQWjtDJS2dE7pOqEYJJa08rRr+SlrGNEHSra2k5cUYlXTcWauSlmFK0oVW0nIKv6RljNTQ0laGjh8GV9Iyvv5K2v65eyppGbBob9xofiUt580haemRSlrankpaOpdpjbRKWgY0UNJxT9+lVX2XpY2kkXTasEBJq2GJpCfMWFapVDo6OuTH39HRoYZGUaRL+it3zR09yZR02uq3c7lbnkrz9DCVtFBzuVuG5d6TlsORdKskbSx3y1NFS7rK0yNX0s8djD3tXO6Wp5baxXTTJZ264t0USbMnPeIlrXu6UqloV3dPWyI+7ujoEFUrPUfVzq5f0s4Lx2S8LWlBlrvt301K0qpH17M93kBJOumpfijkkHTSEyBpNVi52XgBWSWtHhqG1kdO33rGOjpSkk56bkvaGKkkrXqcC92RqHq7sfpdW9KC0rPq0SVtnGjuzvP2O1KSVj1ZJa0vd+uS1s8ihrbPbq91R7clnTyslrTqzyppuzOKImPFW5a77WFK0qpHl7Tq1CWtOnVD63N2aoYWlKSNs/slrYbpF45JT4ik1eGGpAWxsv2BKEkb/R5JqzE1l7vVSJG0fXYladWDpNtK0lWetiVtr28rZxcqaeVpu5LWLxxTf2r1Mlp6lJV1Q6uGFNDqcL2Slh67oZOjko57aklaepSYdUk7r+6Wp3LsSUvPdNXYekb3tF5JS4/eUJI2KmnpnKUajaukBb2Mlh5b0kYlLZ1zdyUNZeh5u1Ujm6T1tW5/JS098/fEDtYNbVfS8UPL0AteTxpPG572VtJx+3bDqKT1C8fUgXolLT1K1Z496fjhbSvrhu7cnzTSKmnpcV7dLU/VrKQTT3slLe3lWkOvpKWhezppaIZeefiSaqiru6UnRyUtA5LGEdPTqpKWh91HVQNJt7ekZbk7clXSRjFdBkkba93SaUhar6TVKrf2sGq5W/9Lkk/S9tXd0h8oaYVdTDdc0vpyd9xZvdwtnYak9WK6UEnP1i8f80paL6b9ktYr6SivpEP2pKWntZIW7OVuW9LGcrd0hktaYUg6ZLlbHdsESSuySlqvpI2vYElnbkkr1HK3PNSXu42RSLp9JO1e7vbsSRvFdA5Ja+3mSVq19a1o6TQkLZ11VtJ1SjptT1qeLYmkxc3S2QRJG9+/kk7nnrQ8VVAlLWOGhaR1TzdB0saetHRm2pOWp9IknbTrrqSde9LSCKmk7e9Jy1M5LhyTAcaetP6jtCtp9qRLIml7mbkISRuTm5IOIVDSxiXfNS8cMzytH6skrXc6PR25ymhBX+uOqpe7nVY2CPkKli5pvd/+CpZg70lH1cvdCuNmJtIZsicduTwtGHvSxoVjqr9Re9LyFSzVmVXS+oSePWm5cMzotytpJ35JK4zvSat+deGYMd7ek46iSN+TjqKo5p604Wn7xRuSdn4FS0la7zQuHFP9Nb+CpU/i2ZNeUr0z7d+TTvN03GPdyUT6/V/B0vvT9qSdO9OODenqm5lIp+crWMnDlD3pKIoC96QjKunhJmkPIZJOpK6EOnnWikBJ33H3PPsrWM609o5j8idbKmlpD/ebmXDHsfa8mUmmO47JH/WG38xEpm23O44lblbb0txxrI0l7afwO47dO+eVb9335JhxC/25c9yCb07c8o2H15Vf0kYxPQLuOIakkbRH0uqPegPvOKb/DWrP24J6KmkkjaSbKum75u0f07Hzzmm7/RkzbdeYadvvefzAsJD0CLstKJJG0iP4tqDllDT37kbSZZF0EUHSSBpJI2kkjaSHtaT7+m8ERiSdaXzNsyBpJI2kkTSSRtJI2i3p3oKpeRYkjaSRNJJG0kgaSbsl3fIgaSSNpJE0kkbSSLqskg7Z3wYAAIDmUwnf4iaEEEJIM1Pp679R9MY4AAAA5CCWdOC9xgAAAKCB3Boa9ARJAwAAtIxbQ4P2/dsVSBoAAKBliKR9F44haQAAgJaQTdIDAwOB8w5oZB0fckih8w+4aO3rBwCANiSDpLMaMfwoY0zNQ5o5f9Hj8TQAAKQRJOmsZV89Es1aXxYxf/3SRdIAAFA/aZKuVCr5K2mdTBLN+q+BJswfcoqs8+tjkDQAAKThlHTydJ2SDjxEN1bWo4qb3zi2sfPn++cCAAC0Fbakq56uR9Lh4w1jFSTRHPNn/edC4PzGSDwNAABODEmbT+eWdI7Banxxks40f45/ZAQemPvNAgBAW8HV3aFHNXB+JA0AACFkvro7U+UaON4+JNP4kPeZdf5K3sWAgl4/AAC0IdxxDAAAoKQgaQAAgJKCpAEAAErKraHBvv4baUHSAAAALaPXC5IGAABoGbeGBj1B0gAAAC1D9qTTQNIAAAAto5DvSQ932uRthsOnAQDQEkKv7tZ/TbfDr+wmvMeyfYae19MOP3EAgBKCpN0U/R7L9hmW7fUAAEClTknry8LGb/m0tfGs/Wk4xw9UY4+32/7509p1zj9g4X9fgVPV7A85acjr8Q92fghZ3xcAAFSyStrze1l/Ku2XddZ2CIHzZD1FpvdSz/wh7yVkkjo/Z//pAt9sjvMCAICHPJW0zsBtKpbYdIzxafOEv27n/IESCjmX58XXfF/h83s6c0/imSfw86l5oqzzez43AADw0BhJh3SGDAj8DV6nhDL5L/DA3PM3fBLPPIGfT80TZZ0/5L0AAIBN4ZIu4hd6vnkGNPzzp01VxPzN/Bw88ztfj/NEjT0vAAB4yPw9af1gj5ayHuKZyok+2CmYtKlCTmG8ErvtmSTfW7A7s04SMo//86k5T8jn7B+WNtg+BQAAVNrt/4JVtANwTCaQNACAn7aQdNECQDD5QNIAAH7aQtJQTpA0AIAfJA0AAFBSkDQAAEBJQdIAAAAlBUkDAACUFCQNAABQUpA0AABASUHSAAAAJQVJAwAAlBQkDQAAUFKQNAAAQElB0gAAACUFSQMAAJQUJA0AAFBSkDQAAEBJQdIAAAAl5dbQYF//jbQgaQAAgJbR6wVJAwAAtIybN2/Kcrfzv0gaAACgZXgMzZ40AABAK6GSBgAAKClU0gAAACWFShoAAKCkUEkDAACUFCppAACAkkIlDQAAUFKopAEAAEoKlTQAAEBJoZIGAAAoKf5K+v+b85bS1hoKHAAAAABJRU5ErkJggg==" alt="" />
unique函数 (STL)的更多相关文章
- C++STL中的unique函数解析
一.总述 unique函数属于STL中比较常用函数,它的功能是元素去重.即”删除”序列中所有相邻的重复元素(只保留一个).此处的删除,并不是真的删除,而是指重复元素的位置被不重复的元素给占领了(详细情 ...
- unique函数(STL)
unique()函数是一个去重函数,STL中unique的函数 unique的功能是去除相邻的重复元素(只保留一个),还有一个容易忽视的特性是它并不真正把重复的元素删除.他是c++中的函数,所以头文件 ...
- STL:unique()函数
unique() unique()是剔除重复他是剔除相邻之间字符重复的,倘若其中中的字符前后之间是没有重复的,unique函数是起不到作用的,所以使用以前都会sort处理. unique()函数的返回 ...
- unique函数的作用
unique() 去重函数 unique()函数是一个去重函数,STL中unique的函数 unique的功能是去除相邻的重复元素(只保留一个),还有一个容易忽视的特性是它并不真正把重复的元素删除.他 ...
- C++中unique函数
目录 介绍 用法举例 数组 vector 介绍 unique是STL比较实用的一个函数.用于"去除"容器内相邻的重复的元素(只保留一个).这里说的去除并不是真正将容器内的重复元素删 ...
- Maximum Value(unique函数,lower_bound()函数,upper_bound()函数的使用)
传送门 在看大佬的代码时候遇到了unique函数以及二分查找的lower_bound和upper_bound函数,所以写这篇文章来记录以备复习. unique函数 在STL中unique函数是一个去重 ...
- C++中unique函数的用法总结
个人感觉,unique是STL中很实用的函数之一,需要#include,下面来简单介绍一下它的作用. unique的作用是"去掉"容器中相邻元素的重复元素,这里去掉要加一个引号,为 ...
- MATLAB 的unique函数——数组矩阵的唯一值
MATLAB 的unique函数——求数组矩阵的唯一值 相关MathWork文档见此:unique数组中的唯一值 1.C = unique(A) 返回与 A 中相同的数据,但是不包含重复项.C 已按照 ...
- IndiaHacks 2016 - Online Edition (Div. 1 + Div. 2)——A - Bear and Three Balls(unique函数的使用)
A. Bear and Three Balls time limit per test 2 seconds memory limit per test 256 megabytes input stan ...
随机推荐
- 【暑假】[实用数据结构]UVAlive 3644 X-Plosives
UVAlive X-Plosives 思路: “如果车上存在k个简单化合物,正好包含k种元素,那么他们将组成一个易爆的混合物” 如果将(a,b)看作一条边那么题意就是不能出现环,很容易联想到K ...
- mvc5经典教程再补充。。
转自:http://www.cnblogs.com/powertoolsteam/p/3656203.html ASP.NET MVC 5 - 查询Details和Delete方法 在这部分教程中 ...
- 【noip2012】疫情控制
题意: 给出一颗n个节点有边权的树 和m个军队所在的位置 军队从某节点移动到相邻节点要花费边长度的时间 求最少要多少时间使得根节点(编号为1)到每个叶子的路径上最少有一支军队(根节点不能有军队) 题解 ...
- hdu4123-Bob’s Race(树形dp+rmq+尺取)
题意:Bob想要开一个运动会,有n个房子和n-1条路(一棵树),Bob希望每个人都从不同的房子开始跑,要求跑的尽可能远,而且每条路只能走最多一次.Bob希望所有人跑的距离的极差不大于q,如果起点的编号 ...
- Sublime Text2 中Emmet(之前叫Zencoding)插件安装以及使用
一.添加插件之前先 下载Package Control 按 Ctrl+`(就是~这个键) 复制下面的代码 确认 重新启动sublime text2 import urllib2,os;pf='Pack ...
- C#利用API制作类似QQ一样的右下角弹出窗体
C#利用API制作类似QQ一样的右下角弹出窗体 (2009-03-21 15:02:49) 转载▼ 标签: 杂谈 分类: .NET using System;using System.Collecti ...
- C#学习笔记——面向对象、面向组件以及类型基础
C#学习笔记——面向对象.面向组件以及类型基础 目录 一 面向对象与面向组件 二 基元类型与 new 操作 三 值类型与引用类型 四 类型转换 五 相等性与同一性 六 对象哈希码 一 面向对象与面向组 ...
- iOS 限制textField输入的长度
1.电话号码(带3-3-4效果) //指定代理 self.phoneTextField.delegate = self; //当编辑改变的时候,进行字符校验 [self.phoneTextField ...
- nape.dynamics.InteractionFilter
(转载http://tomyail.com/blog/1123) Nape定义了三种交互方式: Collision(碰撞) Sensor(感应) Fluid(浮力) 默认情况下两个物体只会发生Coll ...
- ThinkPHP Volist标签
Volist标签主要用于在模板中循环输出数据集或者多维数组. volist标签(循环输出数据) 闭合 非闭合标签 属性 name(必须):要输出的数据模板变量 id(必须):循环变量 offset(可 ...