#include <iostream>
int s_union(const int* a1, int n1, const int* a2, int n2, int* a3);
int s_intersect(const int* a1, int n1, const int* a2, int n2, int* a3);
int s_diff(const int* a1, int n1, const int* a2, int n2, int* a3);
int main(void){
int a[5] = { 1, 2, 7, 8, 10 };
int b[6] = { 0, 2, 9, 10, 15, 40 };
int c[11], n;
n = s_union(a, 5, b, 6, c);
for(int i = 0; i < n; i++)
std::cout << c[i] << ' ';
std::cout << std::endl;
n = s_intersect(a, 5, b, 6, c);
for(int i = 0; i < n; i++)
std::cout << c[i] << ' ';
std::cout << std::endl;
n = s_diff(a, 5, b, 6, c);
for(int i = 0; i < n; i++)
std::cout << c[i] << ' ';
return 0;
}
//объединение множеств
int s_union(const int* a1, int n1, const int* a2, int n2, int* a3){
const int* e1 = a1 + n1;
const int* e2 = a2 + n2;
int* p = a3;
while((a1 != e1) && (a2 != e2)) {
if(*a1 < *a2)
*p++ = *a1++;
else if(*a2 < *a1)
*p++ = *a2++;
else {
*p++ = *a1;
++a1;
++a2;
}
}
while(a1 != e1)
*p++ = *a1++;
while(a2 != e2)
*p++ = *a2++;
return (p - a3);
}
// пересечение множеств
int s_intersect(const int* a1, int n1, const int* a2, int n2, int* a3){
const int* e1 = a1 + n1;
const int* e2 = a2 + n2;
int* p = a3;
while((a1 != e1) && (a2 != e2)) {
if(*a1 < *a2)
*a1++;
else if(*a2 < *a1)
*a2++;
else {
*p++ = *a1;
++a1;
++a2;
}
}
return (p - a3);
}
// разность множеств
int s_diff(const int* a1, int n1, const int* a2, int n2, int* a3){
const int* e1 = a1 + n1;
const int* e2 = a2 + n2;
int* p = a3;
while((a1 != e1) && (a2 != e2)) {
if(*a1 < *a2)
*p++ = *a1++;
else if(*a2 < *a1)
++a2;
else {
++a1;
++a2;
}
}
return (p - a3);
}