题目描述
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了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后面,放的是空格。。。