#include <iostream>
#include <vector>
#include <initializer_list>
#include <functional>
template<typename T>
std::vector<T> merge(std::initializer_list <std::reference_wrapper<const std::vector<T>>> vecs)
{
size_t size = 0;
for(auto &v : vecs) { size += v.get().size(); }
std::vector<T> ret;
ret.reserve(size);
for(auto &v : vecs) { ret.insert(ret.end(), v.get().begin(), v.get().end()); }
return ret;
}
int main()
{
std::vector<std::string> a = {"a", "b"};
std::vector<std::string> b = {"c", "d"};
std::vector<std::string> c = {"e", "f"};
std::vector<std::string> d = {"g", "h"};
std::vector<std::string> newVector = merge({std::cref(a), std::cref(b), std::cref(c), std::cref(d)});
for(auto &s : newVector)
std::cout << s << " ";
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8aW5pdGlhbGl6ZXJfbGlzdD4KI2luY2x1ZGUgPGZ1bmN0aW9uYWw+Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpzdGQ6OnZlY3RvcjxUPiBtZXJnZShzdGQ6OmluaXRpYWxpemVyX2xpc3QgPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8Y29uc3Qgc3RkOjp2ZWN0b3I8VD4+PiB2ZWNzKQp7CglzaXplX3Qgc2l6ZSA9IDA7Cglmb3IoYXV0byAmdiA6IHZlY3MpIHsgc2l6ZSArPSB2LmdldCgpLnNpemUoKTsgfQoJc3RkOjp2ZWN0b3I8VD4gcmV0OwoJcmV0LnJlc2VydmUoc2l6ZSk7Cglmb3IoYXV0byAmdiA6IHZlY3MpIHsgcmV0Lmluc2VydChyZXQuZW5kKCksIHYuZ2V0KCkuYmVnaW4oKSwgdi5nZXQoKS5lbmQoKSk7IH0KCXJldHVybiByZXQ7Cn0KCmludCBtYWluKCkKewoJc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGEgPSB7ImEiLCAiYiJ9OwoJc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGIgPSB7ImMiLCAiZCJ9OwoJc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGMgPSB7ImUiLCAiZiJ9OwoJc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGQgPSB7ImciLCAiaCJ9OwoKCXN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBuZXdWZWN0b3IgPSBtZXJnZSh7c3RkOjpjcmVmKGEpLCBzdGQ6OmNyZWYoYiksIHN0ZDo6Y3JlZihjKSwgc3RkOjpjcmVmKGQpfSk7CgoJZm9yKGF1dG8gJnMgOiBuZXdWZWN0b3IpCgkJc3RkOjpjb3V0IDw8IHMgPDwgIiAiOwoKCXJldHVybiAwOwp9