转自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,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" alt="" />

unique函数 (STL)的更多相关文章

  1. C++STL中的unique函数解析

    一.总述 unique函数属于STL中比较常用函数,它的功能是元素去重.即”删除”序列中所有相邻的重复元素(只保留一个).此处的删除,并不是真的删除,而是指重复元素的位置被不重复的元素给占领了(详细情 ...

  2. unique函数(STL)

    unique()函数是一个去重函数,STL中unique的函数 unique的功能是去除相邻的重复元素(只保留一个),还有一个容易忽视的特性是它并不真正把重复的元素删除.他是c++中的函数,所以头文件 ...

  3. STL:unique()函数

    unique() unique()是剔除重复他是剔除相邻之间字符重复的,倘若其中中的字符前后之间是没有重复的,unique函数是起不到作用的,所以使用以前都会sort处理. unique()函数的返回 ...

  4. unique函数的作用

    unique() 去重函数 unique()函数是一个去重函数,STL中unique的函数 unique的功能是去除相邻的重复元素(只保留一个),还有一个容易忽视的特性是它并不真正把重复的元素删除.他 ...

  5. C++中unique函数

    目录 介绍 用法举例 数组 vector 介绍 unique是STL比较实用的一个函数.用于"去除"容器内相邻的重复的元素(只保留一个).这里说的去除并不是真正将容器内的重复元素删 ...

  6. Maximum Value(unique函数,lower_bound()函数,upper_bound()函数的使用)

    传送门 在看大佬的代码时候遇到了unique函数以及二分查找的lower_bound和upper_bound函数,所以写这篇文章来记录以备复习. unique函数 在STL中unique函数是一个去重 ...

  7. C++中unique函数的用法总结

    个人感觉,unique是STL中很实用的函数之一,需要#include,下面来简单介绍一下它的作用. unique的作用是"去掉"容器中相邻元素的重复元素,这里去掉要加一个引号,为 ...

  8. MATLAB 的unique函数——数组矩阵的唯一值

    MATLAB 的unique函数——求数组矩阵的唯一值 相关MathWork文档见此:unique数组中的唯一值 1.C = unique(A) 返回与 A 中相同的数据,但是不包含重复项.C 已按照 ...

  9. 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 ...

随机推荐

  1. error C2065:未声明的标识符错误

    原文地址:http://blog.sina.com.cn/s/blog_8216ada701017evx.html 在VS2010下进行VC++调试时,出现这样一种错误:error C2065:未声明 ...

  2. CodeForces 696A(Lorenzo Von Matterhorn ) & CodeForces 696B(Puzzles )

    A,给一棵完全二叉树,第一个操作,给两个点,两点路径上的所有边权值都增加w,第二个操作,给两个点,求两点路径上的所有边权值和. 我看一眼题就觉得是树链剖分,而我又不会树链剖分,扔掉. 后来查了题解,首 ...

  3. hdu 5533 Dancing Stars on Me

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5533 Dancing Stars on Me Time Limit: 2000/1000 MS (Ja ...

  4. IOS多线程知识总结/队列概念/GCD/主队列/并行队列/全局队列/主队列/串行队列/同步任务/异步任务区别(附代码)

    进程:正在进行中的程序被称为进程,负责程序运行的内存分配;每一个进程都有自己独立的虚拟内存空间 线程:线程是进程中一个独立的执行路径(控制单元);一个进程中至少包含一条线程,即主线程 队列 dispa ...

  5. Qt QDebug :Cannot retrieve debugging output!

    调试Qt程序时用Qdebug类输出调试信息:     qDebug("read My Com"); 这个问题是个小问题,其实跟程序没关系.当你同时开多个Qt程序(Creator编程 ...

  6. IOS知识小记

    iOS开发 小知识点 http://www.cnblogs.com/tangbinblog/archive/2012/07/20/2601324.html Objective-C中的instancet ...

  7. MySQL 子查询 EXISTS 和 NOT EXISTS

    MySQL EXISTS 和 NOT EXISTS 子查询 MySQL EXISTS 和 NOT EXISTS 子查询语法如下: SELECT ... FROM table WHERE EXISTS ...

  8. 对Prepared Statement 是否可以防止 SQL Injection 的实验

    代码: import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; im ...

  9. ThinkPHP CURD方法盘点:order方法

    order方法属于模型的连贯操作方法之一,用于对操作的结果排序. 用法 $Model->where('status=1')->order('id desc')->limit(5)-& ...

  10. 一个GCC4.6.3的奇妙问题的糊涂解决方案

    因为工作中需要OpenCV,又不想用Windows,所以我就在Linux下编译安装OpenCV了.一开始,由于我的计算机不能安装ubuntu12.04,所以我安装了ubuntu13.04,opencv ...