#include <iostream>
#include <array>
#include <algorithm>
template< typename T,
size_t sizeA,
size_t sizeB >
std::array<T, sizeA+sizeB> operator<<(const std::array<T, sizeA> &one,
const std::array<T, sizeB> &two)
{
std::array<T, sizeA + sizeB> 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;
}
int main() {
std::array<int, 3> a = {1, 2, 3};
std::array<int, 5> 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+Cgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCwKCQkgIHNpemVfdCBzaXplQSwKCQkgIHNpemVfdCBzaXplQiAgPgpzdGQ6OmFycmF5PFQsIHNpemVBK3NpemVCPiBvcGVyYXRvcjw8KGNvbnN0IHN0ZDo6YXJyYXk8VCwgc2l6ZUE+ICZvbmUsCgkJCQkJCQkJCSAgY29uc3Qgc3RkOjphcnJheTxULCBzaXplQj4gJnR3bykKewogICAgc3RkOjphcnJheTxULCBzaXplQSArIHNpemVCPiByZXN1bHQ7CiAgICAKICAgIC8vIGNvcHkgZmlyc3QgcGFydCB0byB0aGUgbmV3IGFycmF5CiAgICBhdXRvIGVuZE9mRmlyc3QgPSBzdGQ6OmNvcHkoc3RkOjpjYmVnaW4ob25lKSwKICAgIAkJCQkJCQlzdGQ6OmNlbmQob25lKSwKICAgIAkJCQkJCQlzdGQ6OmJlZ2luKHJlc3VsdCkpOwogICAgCiAgICAvLyBjb3B5IGEgcmVzdCBvZiBlbGVtZW50cyBmcm9tIHNlY29uZCBhcnJheQogICAgc3RkOjpjb3B5KHN0ZDo6Y2JlZ2luKHR3byksCiAgICAJCSAgc3RkOjpjZW5kKHR3byksCiAgICAJCSAgZW5kT2ZGaXJzdCk7CgoJLy8gc29ydCByZXN1bHRzCiAgICBzdGQ6OnNvcnQoc3RkOjpiZWdpbihyZXN1bHQpLHN0ZDo6ZW5kKHJlc3VsdCkpOwogICAgcmV0dXJuIHJlc3VsdDsKfQoKaW50IG1haW4oKSB7CglzdGQ6OmFycmF5PGludCwgMz4gYSA9IHsxLCAyLCAzfTsKCXN0ZDo6YXJyYXk8aW50LCA1PiBiID0gezgsIDcsIDYsIDUsIDR9OwoJCglhdXRvIHJlc3VsdCA9IGIgPDwgYTsgLy8gdGhlIHR5cGUgaXMgc3RkOjphcnJheTxpbnQsIE4rTT4KCQoJZm9yIChhdXRvIGl0ZW0gOiByZXN1bHQpIHsKCQlzdGQ6OmNvdXQgPDwgaXRlbSA8PCAifCI7Cgl9CgkKCXJldHVybiAwOwp9