#include <iostream>
#include <list>
using namespace std;
template<class T>
class MyList {
private:
list<T> m_list;
public:
void addToBack(const T&);
void addInMiddle(const T&);
void printList();
};
template<class T>
void MyList<T>::addToBack(const T& x) {
m_list.push_back(x);
}
template<class T>
void MyList<T>::addInMiddle(const T& x) {
typename list<T>::iterator it = m_list.begin();
int location = m_list.size() / 2; //where we want to insert the new element
for (int i = 0; i < location; i++) {
it++;
}
m_list.insert(it, x);
}
template<class T>
void MyList<T>::printList() {
for(const auto& elem : m_list) {
cout << elem << " ";
}
cout << endl;
}
int main()
{
MyList<int> list1;
list1.addToBack(1);
list1.addToBack(2);
list1.addToBack(3);
list1.addToBack(4);
list1.addInMiddle(5);
list1.printList();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bGlzdD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnRlbXBsYXRlPGNsYXNzIFQ+CmNsYXNzIE15TGlzdCB7CnByaXZhdGU6CiAgICBsaXN0PFQ+IG1fbGlzdDsKcHVibGljOgogICAgdm9pZCBhZGRUb0JhY2soY29uc3QgVCYpOwogICAgdm9pZCBhZGRJbk1pZGRsZShjb25zdCBUJik7CiAgICB2b2lkIHByaW50TGlzdCgpOwp9OwoKdGVtcGxhdGU8Y2xhc3MgVD4Kdm9pZCBNeUxpc3Q8VD46OmFkZFRvQmFjayhjb25zdCBUJiB4KSB7CiAgICBtX2xpc3QucHVzaF9iYWNrKHgpOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBUPgp2b2lkIE15TGlzdDxUPjo6YWRkSW5NaWRkbGUoY29uc3QgVCYgeCkgewoKICAgIHR5cGVuYW1lIGxpc3Q8VD46Oml0ZXJhdG9yIGl0ID0gbV9saXN0LmJlZ2luKCk7CgogICAgaW50IGxvY2F0aW9uID0gbV9saXN0LnNpemUoKSAvIDI7ICAgICAvL3doZXJlIHdlIHdhbnQgdG8gaW5zZXJ0IHRoZSBuZXcgZWxlbWVudAogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsb2NhdGlvbjsgaSsrKSB7CiAgICAgICAgaXQrKzsKICAgIH0KCiAgICBtX2xpc3QuaW5zZXJ0KGl0LCB4KTsKfQoKdGVtcGxhdGU8Y2xhc3MgVD4Kdm9pZCBNeUxpc3Q8VD46OnByaW50TGlzdCgpIHsKCWZvcihjb25zdCBhdXRvJiBlbGVtIDogbV9saXN0KSB7CgkJY291dCA8PCBlbGVtIDw8ICIgIjsKCX0KCWNvdXQgPDwgZW5kbDsKfQoKaW50IG1haW4oKQp7CiAgICBNeUxpc3Q8aW50PiBsaXN0MTsKICAgIGxpc3QxLmFkZFRvQmFjaygxKTsKICAgIGxpc3QxLmFkZFRvQmFjaygyKTsKICAgIGxpc3QxLmFkZFRvQmFjaygzKTsKICAgIGxpc3QxLmFkZFRvQmFjayg0KTsKICAgIGxpc3QxLmFkZEluTWlkZGxlKDUpOwogICAgbGlzdDEucHJpbnRMaXN0KCk7CiAgICByZXR1cm4gMDsKfQ==