#include <iostream>
using namespace std;
template <typename T, int capacity>
class Queue
{
int values[capacity];
int size;
public:
Queue();
void add(int value);
int getSize() const;
int getValue(int index) const;
template <int Other_capacity>
Queue<T, capacity + Other_capacity> operator+(const Queue<T, Other_capacity>& obj) const;
friend ostream& operator<<(ostream& out, const Queue &q) {
for(int i = 0; i < q.size; ++i) {
out << q.values[i] << " ";
}
out << endl;
return out;
}
};
template <typename T, int capacity>
Queue<T, capacity>::Queue()
{
size = 0;
}
template <typename T, int capacity>
void Queue<T, capacity>::add(int value)
{
if (size < capacity)
values[size++] = value;
}
template <typename T, int capacity>
int Queue<T, capacity>::getSize() const {
return size;
}
template <typename T, int capacity>
int Queue<T, capacity>::getValue(int index) const {
return values[index];
}
template <typename T, int capacity>
template <int Other_capacity>
Queue<T, capacity + Other_capacity> Queue<T, capacity>::operator+(const Queue<T, Other_capacity>& obj) const {
Queue<T, capacity + Other_capacity> result;
for(int i = 0; i < size; ++i)
result.add(getValue(i));
for(int i = 0; i < obj.getSize(); ++i)
result.add(obj.getValue(i));
return result;
}
int main()
{
Queue<int, 15> even;
Queue<int, 10> odd;
even.add(2);
even.add(4);
even.add(6);
odd.add(1);
odd.add(3);
odd.add(5);
Queue<int, 25> sum = even + odd;
cout << sum;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBjYXBhY2l0eT4KY2xhc3MgUXVldWUKewoJaW50IHZhbHVlc1tjYXBhY2l0eV07CglpbnQgc2l6ZTsKCQpwdWJsaWM6CglRdWV1ZSgpOwoJdm9pZCBhZGQoaW50IHZhbHVlKTsKCWludCBnZXRTaXplKCkgY29uc3Q7CglpbnQgZ2V0VmFsdWUoaW50IGluZGV4KSBjb25zdDsKCgl0ZW1wbGF0ZSA8aW50IE90aGVyX2NhcGFjaXR5PgoJUXVldWU8VCwgY2FwYWNpdHkgKyBPdGhlcl9jYXBhY2l0eT4gb3BlcmF0b3IrKGNvbnN0IFF1ZXVlPFQsIE90aGVyX2NhcGFjaXR5PiYgb2JqKSBjb25zdDsKCglmcmllbmQgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiBvdXQsIGNvbnN0IFF1ZXVlICZxKSB7CgkJZm9yKGludCBpID0gMDsgaSA8IHEuc2l6ZTsgKytpKSB7CgkJCW91dCA8PCBxLnZhbHVlc1tpXSA8PCAiICI7CgkJfQoJCW91dCA8PCBlbmRsOwoJCXJldHVybiBvdXQ7Cgl9Cn07Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IGNhcGFjaXR5PgpRdWV1ZTxULCBjYXBhY2l0eT46OlF1ZXVlKCkKewoJc2l6ZSA9IDA7Cn0KCnRlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgY2FwYWNpdHk+CnZvaWQgUXVldWU8VCwgY2FwYWNpdHk+OjphZGQoaW50IHZhbHVlKQp7CglpZiAoc2l6ZSA8IGNhcGFjaXR5KQoJCXZhbHVlc1tzaXplKytdID0gdmFsdWU7Cn0KCnRlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgY2FwYWNpdHk+CmludCBRdWV1ZTxULCBjYXBhY2l0eT46OmdldFNpemUoKSBjb25zdCB7CglyZXR1cm4gc2l6ZTsKfQoKdGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBjYXBhY2l0eT4KaW50IFF1ZXVlPFQsIGNhcGFjaXR5Pjo6Z2V0VmFsdWUoaW50IGluZGV4KSBjb25zdCB7CglyZXR1cm4gdmFsdWVzW2luZGV4XTsKfQoKdGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBjYXBhY2l0eT4KdGVtcGxhdGUgPGludCBPdGhlcl9jYXBhY2l0eT4KUXVldWU8VCwgY2FwYWNpdHkgKyBPdGhlcl9jYXBhY2l0eT4gUXVldWU8VCwgY2FwYWNpdHk+OjpvcGVyYXRvcisoY29uc3QgUXVldWU8VCwgT3RoZXJfY2FwYWNpdHk+JiBvYmopIGNvbnN0IHsKICAgIFF1ZXVlPFQsIGNhcGFjaXR5ICsgT3RoZXJfY2FwYWNpdHk+IHJlc3VsdDsKICAgIGZvcihpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kpCiAgICAJcmVzdWx0LmFkZChnZXRWYWx1ZShpKSk7CiAgICBmb3IoaW50IGkgPSAwOyBpIDwgb2JqLmdldFNpemUoKTsgKytpKQogICAgCXJlc3VsdC5hZGQob2JqLmdldFZhbHVlKGkpKTsKICAgIHJldHVybiByZXN1bHQ7Cn0KCmludCBtYWluKCkKewoJUXVldWU8aW50LCAxNT4gZXZlbjsKCVF1ZXVlPGludCwgMTA+IG9kZDsKCglldmVuLmFkZCgyKTsKCWV2ZW4uYWRkKDQpOwoJZXZlbi5hZGQoNik7CgoJb2RkLmFkZCgxKTsKCW9kZC5hZGQoMyk7CglvZGQuYWRkKDUpOwoKCVF1ZXVlPGludCwgMjU+IHN1bSA9IGV2ZW4gKyBvZGQ7CgoJY291dCA8PCBzdW07CgkKCXJldHVybiAwOwp9