• vector元素去重uninque函数,erase函数


      

    题目描述

    明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。

    Input Param 

         n               输入随机数的个数     

     inputArray      n个随机整数组成的数组 

         

    Return Value

         OutputArray    输出处理后的随机整数


    注:测试用例保证输入参数的正确性,答题者无需验证。测试用例不止一组。

     1 #include<iostream>
     2 #include<algorithm>
     3 #include<vector>
     4 using namespace std;
     5 int main()
     6 {
     7     vector<int> data;
     8     int temp;
     9     int len=0;
    10     while(cin >> len){
    11         if(!len)break;
    12         for(int i=0;i<len;++i){
    13             cin >> temp;
    14             data.push_back(temp);
    15         }
    16         sort(data.begin(),data.end());
    17         data.erase(unique(data.begin(),data.end()),data.end());
    18 
    19         for(auto n : data){
    20             cout << n << endl;
    21         }
    22         data.clear();
    23         vector<int>().swap(data);
    24     }
    25     return 0;
    26 }

    注:unique函数功能是去除相邻的重复元素,注意是相邻,所以必须先使用sort函数。还有一个容易忽视的特性是它并不真正把重复的元素删除。之所以说比不真正把重复的元素删除,因为unique实际上并没有删除任何元素,而是将无重复的元素复制到序列的前段,从而覆盖相邻的重复元素。unique返回的迭代器指向超出无重复的元素范围末端的下一个位置。

    另一种方法:

    vector<int>::iterator it =unique(ivec.begin(),ivec.end()); 
      copy(ivec.begin(),it,ostream_iterator<int>(cout," ")); 
    另外我测试了如果对于字符串,不是将重的字符串放在ivec后面,放的是空格。。。

  • 相关阅读:
    [51nod] 1301 集合异或和
    [BZOJ] 1088: [SCOI2005]扫雷Mine
    [LUOGU] P4251 [SCOI2015]小凸玩矩阵
    8.21模拟赛
    [BZOJ] 3163: [Heoi2013]Eden的新背包问题
    [BZOJ] 1001: [BeiJing2006]狼抓兔子
    【NOIP2017提高A组冲刺11.8】好文章
    [BZOJ] 1520: [POI2006]Szk-Schools
    [BZOJ] 1877: [SDOI2009]晨跑
    day23(事务管理)
  • 原文地址:https://www.cnblogs.com/CreatorKou/p/8763792.html
Copyright © 2020-2023  润新知