给定三个数组,您需要将第一个与其他两个进行比较,并显示其他两个中缺少的元素。
输入是数组大小和组成:
6
0 5 7 8 9 11
5
1 2 3 4 5
3
3 6 7
应该是答案
0 8 9 11
工作解决方案:
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;
typedef vector<short> vSh;
short read_item(){
short item;
std::cin >> item;
return item;
}
vSh read_vector(short n){
cin >> n;
vSh v(n);
generate_n(v.begin(), n, read_item);
return v;
}
int main(){
short n, m, k;
vSh v1, v2, v3, dif;
// Заполняю контейнеры.
v1 = read_vector(n);
v2 = read_vector(m);
v3 = read_vector(k);
// Объединяю, добавлением во второй контейнер третий.
copy(v3.begin(), v3.end(), back_inserter(v2));
//Сортирую получившийся объединённый контейнер.
sort(v2.begin(), v2.end());
//Удаляю в нем повторяющиеся элементы.
auto it = unique(v2.begin(), v2.end());
v2.erase(it, v2.end());
//Сортирую первый контейнер.
sort(v1.begin(), v1.end());
//Произвожу "вычитание" из первого контейнера элементы, которые есть в
//объединённом.
set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(),
inserter(dif, dif.begin()));
//Произвожу вывод элементов через пробел.
copy(dif.begin(), dif.end(), ostream_iterator<short>(cout, " "));
return 0;
}
非常感谢您帮助您提供示例和评论,以了解应用算法的过程!!!!
如果容器未排序,则必须在其他两个容器中按顺序搜索第一个容器的元素。
下面是一个演示程序,展示了如何在这种情况下使用标准算法。
程序输出到控制台:
copy_if您也可以使用查找编码
PS 答案存储在数组中
ans缺点:不考虑重复,数组必须排序。