#include <iostream>
#include <algorithm>
#include <array>
#include <vector>
#include <functional>
using namespace std;
//两集合的合集
template <class InputIterator1, class InputIterator2, class OutputIterator>
OutputIterator _set_union (InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
OutputIterator result)
{
while (true)
{
if (first1==last1) return copy(first2,last2,result);
if (first2==last2) return copy(first1,last1,result);
if (*first1<*first2) { *result = *first1; ++first1; }
else if (*first2<*first1) { *result = *first2; ++first2; }
else { *result = *first1; ++first1; ++first2; }
++result;
}
}
//两集合的交集
template <class InputIterator1, class InputIterator2, class OutputIterator>
OutputIterator _set_intersection (InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
OutputIterator result)
{
while (first1!=last1 && first2!=last2)
{
if (*first1<*first2) ++first1;
else if (*first2<*first1) ++first2;
else {
*result = *first1;
++result; ++first1; ++first2;
}
}
return result;
}
//A-B的差集
template <class InputIterator1, class InputIterator2, class OutputIterator>
OutputIterator set_difference (InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
OutputIterator result)
{
while (first1!=last1 && first2!=last2)
{
if (*first1<*first2) { *result = *first1; ++result; ++first1; }
else if (*first2<*first1) ++first2;
else { ++first1; ++first2; }
}
return copy(first1,last1,result);
}
int main(){
array<int,8> t1 = {3,5,7,11,13,17,19,23};
array<int,8> t2 = {3,5,7,11,13,17,19,23};
array<int,16> t3;
set_union(t1.begin(),t1.end(),t2.begin(),t2.end(),t3.begin());
for_each(t3.begin(),t3.end(),[](int i){cout<<i<<endl;});
return 0;
}