【整理】C++中的unique函数

之前总结了一下我觉得有用的erase,lower_bound,upper_bound。

  • 现在总结一下unique,unique的作用是“去掉”容器中相邻元素的重复元素(不一定要求数组有序),它会把重复的元素添加到容器末尾(所以数组大小并没有改变),而返回值是去重之后的尾地址,下面举个例子。
  • 由于返回的是容器末尾,所以如果想得到去重后的size,需要减去初始地址,lower_bound是得到地址,稍微不同。

如:

  sz = unique(b + 1,b + n + 1)-(b + 1);
  sz = unique(a,a + n) - a;

对比一下lower_bound:

  pos=lower_bound(b + 1,b + sz + 1,a[i]) - b;
  • 或许你会说可以直接模拟。通过再开一个数组,数字与前一个相同的相同的不加入新数组,仅仅多开了一个数组而已,不久搞定了吗。那么unique到底有什么优势呢?比如,假如要得到相邻不同的字符串组,用unique就方便些(好像模拟也不麻烦,就当为了“美”而用unique吧)。
sort(words.begin(), words.end());
vector<string>::iterator end_unique =  unique(words.begin(), words.end());
words.erase(end_unique, words.end());
  • 如果要删去重复元素,可以把尾巴删去即可(或者直接定义新的长度!)。
#include <iostream>
#include <cassert>
#include <algorithm>
#include <vector>
#include <string>
#include <iterator>
using namespace std;
int main()
{
    const int N=11;
    int array1[N]={1,2,0,3,3,0,7,7,7,0,8};
    vector<int> vector1;
    for (int i=0;i<N;++i)
        vector1.push_back(array1[i]);

    vector<int>::iterator new_end;
    new_end=unique(vector1.begin(),vector1.end());    //"删除"相邻的重复元素
    assert(vector1.size()==N);

    vector1.erase(new_end,vector1.end());  //删除(真正的删除)重复的元素
    copy(vector1.begin(),vector1.end(),ostream_iterator<int>(cout," "));
    cout<<endl;

    return 0;
}

(代码当然是舶来品。。。)

时间: 2024-11-08 21:27:55

【整理】C++中的unique函数的相关文章

C++中的unique函数

转自:https://blog.csdn.net/tomorrowtodie/article/details/51907471 unique()是C++标准库函数里面的函数,其功能是去除相邻的重复元素(只保留一个),所以使用前需要对数组进行排序 n = unique(a,a+n) - a; 上面的一个使用中已经给出该函数的一个使用方法,对于长度为n数组a,unique(a,a+n) - a返回的是去重后的数组长度 那它是怎么实现去重的呢?删除? 不是,它并没有将重复的元素删除,而是把重复的元素放

c#中关于时间函数的整理

闲来无事,为了加深自己的印象,在此对c#中的时间函数进行整理,为了能够方便别人,也同时方便自己. 在编写代码中,我们往往在很多时候需要用到时间函数.俗话说,孰能生巧,但是当我们一段时间不用的话,慢慢就淡忘了,当用到时候又需要在网上找资料,查来查去,为了使自己能够不断提高,定时整理自己所感悟的,为将来忘记所用,也是不错的. 今天整理一下用到的时间函数:如下.     //获取日期+时间      DateTime.Now.ToString();            // 2008-9-4 20:

python中数据分析常用函数整理

一. apply函数 作用:对 DataFrame 的某行/列应用函数之后,Apply 返回一些值.函数既可以使用默认的,也可以自定义.注意:在第二个输出中应用 head() 函数,因为它包含了很多行. #创建一个新函数 def num_missing(x): return sum(x.isnull()) #应用每一列 print "Missing values per column:" print data.apply(num_missing, axis=0) #axis=0 def

string中常用的函数

发现在string在处理这符串是很好用,就找了一篇文章放在这里了.. 用 string来代替char * 数组,使用sort排序算法来排序,用unique 函数来去重1.Define           string s1 = "hello";           string s2 = "world";           string s3 = s1 + "," + s2 +"!\n";2.append          

matlab 基础 unique函数与ismember函数

(1)unique函数 函数格式: b = unique (a)             %取集合a的不重复元素构成的向量: b = unique (A,'rows')   %返回A.B不同行元素组成的矩阵: [b,i,j] = unique (-)      %其中 i 体现b中元素在原向量(矩阵a)中的位置:j体现原向量(矩阵a)在b中的位置: 代码: >> A=[1 2 3;4 5 6;7 8 9;1 2 3;5 5 5;6 6 6;6 7 8] A = 1 2 3 4 5 6 7 8

linux编程中接收主函数返回值以及错误码提示

程序A创建子进程,并调用进程B,根据不调用的不同情况,最后显示结果不同. #include <stdio.h> #include <unistd.h> #include <sys/wait.h> #include <sys/types.h> #include <errno.h> int main() { pid_t pid, rpid; int stat; if ((pid = fork()) < 0) { perror("for

头文件algorithm中的常用函数

头文件algorithm中的常用函数 一.非修改性序列操作(12个) 循环         对序列中的每个元素执行某操作         for_each() 查找         在序列中找出某个值的第一次出现的位置         find() 在序列中找出符合某谓词的第一个元素     find_if() 在序列中找出一子序列的最后一次出现的位置         find_end() 在序列中找出第一次出现指定值集中之值的位置     find_first_of() 在序列中找出相邻的一对

unique函数的作用

unique() 去重函数 unique()函数是一个去重函数,STL中unique的函数 unique的功能是去除相邻的重复元素(只保留一个),还有一个容易忽视的特性是它并不真正把重复的元素删除.他是c++中的函数,所以头文件要加#include<iostream.h>: 具体用法如下: int num[100]; unique(num,mun+n)返回的是num去重后的尾地址,之所以说比不真正把重复的元素删除,其实是,该函数把重复的元素一到后面去了,然后依然保存到了原数组中,然后返回去重后

[整理]android中几种常见的尺寸

获取屏幕宽高尺寸的三种代码形式 在Android上,目前我知道的获取屏幕尺寸的方法有三种不同的代码形式 方法1.在Activity中最常见的调用方式 WindowManager windowManager = getWindowManager(); Display display = windowManager.getDefaultDisplay(); int screenWidth = display.getWidth(); int screenHeight = display.getHeig