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后面,放的是空格。。。

原文地址:https://www.cnblogs.com/CreatorKou/p/8763792.html