#include <iostream>
#include <array>
#include <algorithm>
const int N = 3;
const int M = 5;
std::array<int, N+M> operator<<(const std::array<int, N> &one,
const std::array<int, M> &two)
{
std::array<int, N+M> result;
// copy first part to the new array
auto endOfFirst = std::copy(std::cbegin(one),
std::cend(one),
std::begin(result));
// copy a rest of elements from second array
std::copy(std::cbegin(two),
std::cend(two),
endOfFirst);
// sort results
std::sort(std::begin(result),std::end(result));
return result;
}
// needed to support "a << b" and "b << a"
std::array<int, N+M> operator<<(const std::array<int, M> &one,
const std::array<int, N> &two)
{
return operator<<(two, one);
}
int main() {
std::array<int, N> a = {1, 2, 3};
std::array<int, M> b = {8, 7, 6, 5, 4};
auto result = b << a; // the type is std::array<int, N+M>
for (auto item : result) {
std::cout << item << "|";
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YXJyYXk+CiNpbmNsdWRlIDxhbGdvcml0aG0+Cgpjb25zdCBpbnQgTiA9IDM7CmNvbnN0IGludCBNID0gNTsKCnN0ZDo6YXJyYXk8aW50LCBOK00+IG9wZXJhdG9yPDwoY29uc3Qgc3RkOjphcnJheTxpbnQsIE4+ICZvbmUsCgkJCQkJCQkJY29uc3Qgc3RkOjphcnJheTxpbnQsIE0+ICZ0d28pCnsKICAgIHN0ZDo6YXJyYXk8aW50LCBOK00+IHJlc3VsdDsKICAgIAogICAgLy8gY29weSBmaXJzdCBwYXJ0IHRvIHRoZSBuZXcgYXJyYXkKICAgIGF1dG8gZW5kT2ZGaXJzdCA9IHN0ZDo6Y29weShzdGQ6OmNiZWdpbihvbmUpLAogICAgCQkJCQkJCXN0ZDo6Y2VuZChvbmUpLAogICAgCQkJCQkJCXN0ZDo6YmVnaW4ocmVzdWx0KSk7CiAgICAKICAgIC8vIGNvcHkgYSByZXN0IG9mIGVsZW1lbnRzIGZyb20gc2Vjb25kIGFycmF5CiAgICBzdGQ6OmNvcHkoc3RkOjpjYmVnaW4odHdvKSwKICAgIAkJICBzdGQ6OmNlbmQodHdvKSwKICAgIAkJICBlbmRPZkZpcnN0KTsKCgkvLyBzb3J0IHJlc3VsdHMKICAgIHN0ZDo6c29ydChzdGQ6OmJlZ2luKHJlc3VsdCksc3RkOjplbmQocmVzdWx0KSk7CiAgICByZXR1cm4gcmVzdWx0Owp9CgovLyBuZWVkZWQgdG8gc3VwcG9ydCAiYSA8PCBiIiBhbmQgImIgPDwgYSIKc3RkOjphcnJheTxpbnQsIE4rTT4gb3BlcmF0b3I8PChjb25zdCBzdGQ6OmFycmF5PGludCwgTT4gJm9uZSwKCQkJCQkJCQljb25zdCBzdGQ6OmFycmF5PGludCwgTj4gJnR3bykKewoJcmV0dXJuIG9wZXJhdG9yPDwodHdvLCBvbmUpOwp9CgppbnQgbWFpbigpIHsKCXN0ZDo6YXJyYXk8aW50LCBOPiBhID0gezEsIDIsIDN9OwoJc3RkOjphcnJheTxpbnQsIE0+IGIgPSB7OCwgNywgNiwgNSwgNH07CgkKCWF1dG8gcmVzdWx0ID0gYiA8PCBhOyAvLyB0aGUgdHlwZSBpcyBzdGQ6OmFycmF5PGludCwgTitNPgoJCglmb3IgKGF1dG8gaXRlbSA6IHJlc3VsdCkgewoJCXN0ZDo6Y291dCA8PCBpdGVtIDw8ICJ8IjsKCX0KCQoJcmV0dXJuIDA7Cn0=