描述
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。
格式
输入格式
输入有2行,第1行为1个正整数,表示所生成的随机数的个数:
N
第2行有N个用空格隔开的正整数,为所产生的随机数。
输出格式
输出也是2行,第1行为1个正整数M,表示不相同的随机数的个数。第2行为M个用空格隔开的正整数,为从小到大排好序的不相同的随机数。
用到两个泛型算法(包含在头文件<algorithm>中):p342.
1.sort:调用sort会重排输入序列的元素,使之有序,它是利用元素类型的<运算符来实现排序的,sort算法接受两个迭代器,表示要排序元素的范围。
2.unique:unique算法重排输入序列,将相邻的重复项“消除”,并返回一个不重复值范围末尾的迭代器。打引号是因为unique并不真的删除任何元素,它只是覆盖xiangl 的重复元素,使得不重复元素出现在序列开始部分,unique返回的迭代器指向最后一个不重复元素之后的位置。此位置之后的元素仍然存在,但我们不知道它们的值是什么。
由于算法不能执行容器的操作,我们将用vector的erase成员来完成真正的删除操作。
Note:标准库算法对迭代器而不是容器进行操作。因此,算法不能(直接)添加或删除元素。
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
int n, val;
vector<int> v;
while (cin >> n)
{
while (n--&&cin >> val)
{
v.push_back(val);
}
sort(v.begin(), v.end());
auto end_unique = unique(v.begin(), v.end());
v.erase(end_unique, v.end());
cout << v.size() << endl;
for (auto c : v)
cout << c << ' ';
}
return 0;
}