//перевести затем в шаблон
#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
namespace Integer_operations {
using std::set_union;
using std::set_intersection;
using std::insert_iterator;
using std::copy;
using std::ostream_iterator;
using std::cout;
//template <typename T>
class Intset {
typedef std::vector<int> Array;
const Array& InputArray1, InputArray2;
Array Union, Intersection;
bool Union_status;
bool Intersection_status;
void make_Union();
void make_Intersection();
//deleted constructors
Intset(const Intset&);
Intset& operator=(const Intset&);
public:
Intset(Array& argInputArray1, Array& argInputArray2)
: InputArray1(argInputArray1), InputArray2(argInputArray2),
Union_status(false), Intersection_status(false)
{
}
~Intset()
{
}
Intset& print_Union();
Intset& print_Intersection();
};
}
// MAKE FOR CONSTANT SOURCES
//#include "intset.hpp"
namespace Integer_operations {
//template <typename T>
void Intset::make_Union()
{
insert_iterator<Array> Iter_insert_to_Union(Union, Union.begin());
set_union(InputArray1.begin(), InputArray1.end(), InputArray2.begin(), InputArray2.end(), Iter_insert_to_Union);
Union_status = true;
}
//template <typename T>
inline Intset& Intset::print_Union()
{
if (Union_status) {
cout << ".:Union:.\n";
ostream_iterator<int, char> Iter_cout(cout, ", ");
copy(Union.begin(), Union.end(), Iter_cout);
} else {
make_Union();
print_Union();
}
return *this;
}
//template <typename T>
void Intset::make_Intersection()
{
insert_iterator<Array> Iter_insert_to_Isect(Intersection, Intersection.begin());
set_intersection(InputArray1.begin(), InputArray1.end(), InputArray2.begin(), InputArray2.end(), Iter_insert_to_Isect);
Intersection_status = true;
}
//template <typename T>
inline Intset& Intset::print_Intersection()
{
if (Intersection_status) {
std::cout << ".:Intersection:.\n";
ostream_iterator<int, char> Iter_cout(cout, ", ");
copy(Intersection.begin(), Intersection.end(), Iter_cout);
} else {
make_Intersection();
print_Intersection();
}
return *this;
}
}
//#include "intset.hpp"
int main()
{
using namespace Integer_operations;
const int Xs = 11, Ys = 14;
int X[Xs] = {4, 1, 7, 43, 98, 1, 3, 75, 9, 0, 32},
Y[Ys] = {7, 98, 1, 34, 9, 642, 34, 9, 3, 423, 2, 53, 2, 6};
std::vector<int> V1(X, X+Xs), V2(Y, Y+Ys);
Intset I(V1, V2);
I.print_Intersection().print_Union();
return 0;
}
Ly/Qv9C10YDQtdCy0LXRgdGC0Lgg0LfQsNGC0LXQvCDQsiDRiNCw0LHQu9C+0L0KCiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGl0ZXJhdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKbmFtZXNwYWNlIEludGVnZXJfb3BlcmF0aW9ucyB7Cgl1c2luZyBzdGQ6OnNldF91bmlvbjsKCXVzaW5nIHN0ZDo6c2V0X2ludGVyc2VjdGlvbjsKCXVzaW5nIHN0ZDo6aW5zZXJ0X2l0ZXJhdG9yOwoJdXNpbmcgc3RkOjpjb3B5OwoJdXNpbmcgc3RkOjpvc3RyZWFtX2l0ZXJhdG9yOwoJdXNpbmcgc3RkOjpjb3V0OwoKCS8vdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CgljbGFzcyBJbnRzZXQgewoJCXR5cGVkZWYgc3RkOjp2ZWN0b3I8aW50PiBBcnJheTsKCgkJY29uc3QgQXJyYXkmIElucHV0QXJyYXkxLCBJbnB1dEFycmF5MjsKCQlBcnJheSBVbmlvbiwgSW50ZXJzZWN0aW9uOwoKCQlib29sIFVuaW9uX3N0YXR1czsKCQlib29sIEludGVyc2VjdGlvbl9zdGF0dXM7CgoJCXZvaWQgbWFrZV9VbmlvbigpOwoJCXZvaWQgbWFrZV9JbnRlcnNlY3Rpb24oKTsKCgkJLy9kZWxldGVkIGNvbnN0cnVjdG9ycwoJCUludHNldChjb25zdCBJbnRzZXQmKTsKCQlJbnRzZXQmIG9wZXJhdG9yPShjb25zdCBJbnRzZXQmKTsKCglwdWJsaWM6CgoJCUludHNldChBcnJheSYgYXJnSW5wdXRBcnJheTEsIEFycmF5JiBhcmdJbnB1dEFycmF5MikKCQk6IElucHV0QXJyYXkxKGFyZ0lucHV0QXJyYXkxKSwgSW5wdXRBcnJheTIoYXJnSW5wdXRBcnJheTIpLAoJCVVuaW9uX3N0YXR1cyhmYWxzZSksIEludGVyc2VjdGlvbl9zdGF0dXMoZmFsc2UpCgkJewoJCX0KCgkJfkludHNldCgpCgkJewoJCX0KCgkJSW50c2V0JiBwcmludF9VbmlvbigpOwoJCUludHNldCYgcHJpbnRfSW50ZXJzZWN0aW9uKCk7Cgl9Owp9CgovLyBNQUtFIEZPUiBDT05TVEFOVCBTT1VSQ0VTCgovLyNpbmNsdWRlICJpbnRzZXQuaHBwIgoKbmFtZXNwYWNlIEludGVnZXJfb3BlcmF0aW9ucyB7CgoJLy90ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KCXZvaWQgSW50c2V0OjptYWtlX1VuaW9uKCkKCXsKCQlpbnNlcnRfaXRlcmF0b3I8QXJyYXk+IEl0ZXJfaW5zZXJ0X3RvX1VuaW9uKFVuaW9uLCBVbmlvbi5iZWdpbigpKTsKCQlzZXRfdW5pb24oSW5wdXRBcnJheTEuYmVnaW4oKSwgSW5wdXRBcnJheTEuZW5kKCksIElucHV0QXJyYXkyLmJlZ2luKCksIElucHV0QXJyYXkyLmVuZCgpLCBJdGVyX2luc2VydF90b19Vbmlvbik7CgoJCVVuaW9uX3N0YXR1cyA9IHRydWU7Cgl9CgkvL3RlbXBsYXRlIDx0eXBlbmFtZSBUPgoJaW5saW5lIEludHNldCYgSW50c2V0OjpwcmludF9VbmlvbigpCgl7CgkJaWYgKFVuaW9uX3N0YXR1cykgewoJCQljb3V0IDw8ICIuOlVuaW9uOi5cbiI7CgkJCW9zdHJlYW1faXRlcmF0b3I8aW50LCBjaGFyPiBJdGVyX2NvdXQoY291dCwgIiwgIik7CgkJCWNvcHkoVW5pb24uYmVnaW4oKSwgVW5pb24uZW5kKCksIEl0ZXJfY291dCk7CgkJfSBlbHNlIHsKCQkJbWFrZV9VbmlvbigpOwoJCQlwcmludF9VbmlvbigpOwoJCX0KCQkKCQlyZXR1cm4gKnRoaXM7Cgl9CgoJLy90ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KCXZvaWQgSW50c2V0OjptYWtlX0ludGVyc2VjdGlvbigpCgl7CgkJaW5zZXJ0X2l0ZXJhdG9yPEFycmF5PiBJdGVyX2luc2VydF90b19Jc2VjdChJbnRlcnNlY3Rpb24sIEludGVyc2VjdGlvbi5iZWdpbigpKTsKCQlzZXRfaW50ZXJzZWN0aW9uKElucHV0QXJyYXkxLmJlZ2luKCksIElucHV0QXJyYXkxLmVuZCgpLCBJbnB1dEFycmF5Mi5iZWdpbigpLCBJbnB1dEFycmF5Mi5lbmQoKSwgSXRlcl9pbnNlcnRfdG9fSXNlY3QpOwoKCQlJbnRlcnNlY3Rpb25fc3RhdHVzID0gdHJ1ZTsKCX0KCgkvL3RlbXBsYXRlIDx0eXBlbmFtZSBUPgoJaW5saW5lIEludHNldCYgSW50c2V0OjpwcmludF9JbnRlcnNlY3Rpb24oKQoJewoJCWlmIChJbnRlcnNlY3Rpb25fc3RhdHVzKSB7CgkJCXN0ZDo6Y291dCA8PCAiLjpJbnRlcnNlY3Rpb246LlxuIjsKCQkJb3N0cmVhbV9pdGVyYXRvcjxpbnQsIGNoYXI+IEl0ZXJfY291dChjb3V0LCAiLCAiKTsKCQkJY29weShJbnRlcnNlY3Rpb24uYmVnaW4oKSwgSW50ZXJzZWN0aW9uLmVuZCgpLCBJdGVyX2NvdXQpOwoJCX0gZWxzZSB7CgkJCW1ha2VfSW50ZXJzZWN0aW9uKCk7CgkJCXByaW50X0ludGVyc2VjdGlvbigpOwoJCX0KCgkJcmV0dXJuICp0aGlzOwoJfQp9CgovLyNpbmNsdWRlICJpbnRzZXQuaHBwIgoKaW50IG1haW4oKQp7Cgl1c2luZyBuYW1lc3BhY2UgSW50ZWdlcl9vcGVyYXRpb25zOwoJY29uc3QgaW50IFhzID0gMTEsIFlzID0gMTQ7CglpbnQgWFtYc10gPSB7NCwgMSwgNywgNDMsIDk4LCAxLCAzLCA3NSwgOSwgMCwgMzJ9LAoJCVlbWXNdID0gezcsIDk4LCAxLCAzNCwgOSwgNjQyLCAzNCwgOSwgMywgNDIzLCAyLCA1MywgMiwgNn07CglzdGQ6OnZlY3RvcjxpbnQ+IFYxKFgsIFgrWHMpLCBWMihZLCBZK1lzKTsKCQoJCglJbnRzZXQgSShWMSwgVjIpOwoJSS5wcmludF9JbnRlcnNlY3Rpb24oKS5wcmludF9VbmlvbigpOwoJcmV0dXJuIDA7Cgp9