#include <iostream>
#include <list>
using namespace std;
void printList(list<int> list);
void printList(list< list<int> > list);
void printListPointers(list<int> list);
void printListPointers(list< list<int> > list);
class List {
public:
List(int, int);
list< list<int> > root;
};
List::List(int a, int b) {
list<int> l;
l.push_back(a);
l.push_back(b);
root.push_back(l);
cout << "constructor, root is " << &(root) << endl;
cout << "constructor, values: root "; printList(root); cout << endl;
cout << "constructor, values: first node in root "; printList(*(root.begin())); cout << endl;
cout << "constructor, pointers: root "; printListPointers(root); cout << endl;
cout << "constructor, pointers: first node in root "; printListPointers(*(root.begin())); cout << endl;
cout << endl << endl;
}
int main() {
List foo = List(2, 3);
cout << "main, root is " << &(foo.root) << endl;
cout << "main, values: root "; printList(foo.root); cout << endl;
cout << "main, values: first node in root "; printList(*(foo.root.begin())); cout << endl;
cout << "main, pointers: root "; printListPointers(foo.root); cout << endl;
cout << "main, pointers: first node in root "; printListPointers(*(foo.root.begin())); cout << endl;
cout << endl << endl;
list< list<int> > copyOfRoot = list< list<int> >(foo.root);
cout << "main, copyOfRoot is " << ©OfRoot << endl;
cout << "main, values: copyOfRoot "; printList(copyOfRoot); cout << endl;
cout << "main, values: first node in copyOfRoot "; printList(*(copyOfRoot.begin())); cout << endl;
cout << "main, pointers: copyOfRoot "; printListPointers(copyOfRoot); cout << endl;
cout << "main, pointers: first node in copyOfRoot "; printListPointers(*(copyOfRoot.begin())); cout << endl;
cout << endl << endl;
return 0;
}
void printList(list<int> l) {
cout << "{";
for (list<int>::iterator it = l.begin(); it != l.end(); it++) {
cout << *it << ", ";
}
cout << "}";
}
void printList(list< list<int> > l) {
cout << "{";
for (list< list<int> >::iterator it = l.begin(); it != l.end(); it++) {
printList(*it);
}
cout << "}";
}
void printListPointers(list<int> l) {
cout << "{";
for (list<int>::iterator it = l.begin(); it != l.end(); it++) {
cout << &*it << ", ";
}
cout << "}";
}
void printListPointers(list< list<int> > l) {
cout << "{";
for (list< list<int> >::iterator it = l.begin(); it != l.end(); it++) {
cout << &*it << ", ";
}
cout << "}";
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bGlzdD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2b2lkIHByaW50TGlzdChsaXN0PGludD4gbGlzdCk7CnZvaWQgcHJpbnRMaXN0KGxpc3Q8IGxpc3Q8aW50PiA+IGxpc3QpOwp2b2lkIHByaW50TGlzdFBvaW50ZXJzKGxpc3Q8aW50PiBsaXN0KTsKdm9pZCBwcmludExpc3RQb2ludGVycyhsaXN0PCBsaXN0PGludD4gPiBsaXN0KTsKCmNsYXNzIExpc3QgewogICAgcHVibGljOgogICAgICAgIExpc3QoaW50LCBpbnQpOwogICAgICAgIGxpc3Q8IGxpc3Q8aW50PiA+IHJvb3Q7Cn07CgpMaXN0OjpMaXN0KGludCBhLCBpbnQgYikgewogICAgbGlzdDxpbnQ+IGw7CiAgICBsLnB1c2hfYmFjayhhKTsKICAgIGwucHVzaF9iYWNrKGIpOwogICAgcm9vdC5wdXNoX2JhY2sobCk7CiAgICBjb3V0IDw8ICJjb25zdHJ1Y3Rvciwgcm9vdCBpcyAiIDw8ICYocm9vdCkgPDwgZW5kbDsKICAgIGNvdXQgPDwgImNvbnN0cnVjdG9yLCB2YWx1ZXM6IHJvb3QgIjsgcHJpbnRMaXN0KHJvb3QpOyBjb3V0IDw8IGVuZGw7CiAgICBjb3V0IDw8ICJjb25zdHJ1Y3RvciwgdmFsdWVzOiBmaXJzdCBub2RlIGluIHJvb3QgIjsgcHJpbnRMaXN0KCoocm9vdC5iZWdpbigpKSk7IGNvdXQgPDwgZW5kbDsKICAgIGNvdXQgPDwgImNvbnN0cnVjdG9yLCBwb2ludGVyczogcm9vdCAiOyBwcmludExpc3RQb2ludGVycyhyb290KTsgY291dCA8PCBlbmRsOwogICAgY291dCA8PCAiY29uc3RydWN0b3IsIHBvaW50ZXJzOiBmaXJzdCBub2RlIGluIHJvb3QgIjsgcHJpbnRMaXN0UG9pbnRlcnMoKihyb290LmJlZ2luKCkpKTsgY291dCA8PCBlbmRsOwogICAgCiAgICBjb3V0IDw8IGVuZGwgPDwgZW5kbDsKfQoKaW50IG1haW4oKSB7CglMaXN0IGZvbyA9IExpc3QoMiwgMyk7CiAgICBjb3V0IDw8ICJtYWluLCByb290IGlzICIgPDwgJihmb28ucm9vdCkgPDwgZW5kbDsKICAgIGNvdXQgPDwgIm1haW4sIHZhbHVlczogcm9vdCAiOyBwcmludExpc3QoZm9vLnJvb3QpOyBjb3V0IDw8IGVuZGw7CiAgICBjb3V0IDw8ICJtYWluLCB2YWx1ZXM6IGZpcnN0IG5vZGUgaW4gcm9vdCAiOyBwcmludExpc3QoKihmb28ucm9vdC5iZWdpbigpKSk7IGNvdXQgPDwgZW5kbDsKICAgIGNvdXQgPDwgIm1haW4sIHBvaW50ZXJzOiByb290ICI7IHByaW50TGlzdFBvaW50ZXJzKGZvby5yb290KTsgY291dCA8PCBlbmRsOwogICAgY291dCA8PCAibWFpbiwgcG9pbnRlcnM6IGZpcnN0IG5vZGUgaW4gcm9vdCAiOyBwcmludExpc3RQb2ludGVycygqKGZvby5yb290LmJlZ2luKCkpKTsgY291dCA8PCBlbmRsOwogICAgCiAgICBjb3V0IDw8IGVuZGwgPDwgZW5kbDsKICAgIAogICAgbGlzdDwgbGlzdDxpbnQ+ID4gY29weU9mUm9vdCA9IGxpc3Q8IGxpc3Q8aW50PiA+KGZvby5yb290KTsKICAgIAogICAgY291dCA8PCAibWFpbiwgY29weU9mUm9vdCBpcyAiIDw8ICZjb3B5T2ZSb290IDw8IGVuZGw7CiAgICBjb3V0IDw8ICJtYWluLCB2YWx1ZXM6IGNvcHlPZlJvb3QgIjsgcHJpbnRMaXN0KGNvcHlPZlJvb3QpOyBjb3V0IDw8IGVuZGw7CiAgICBjb3V0IDw8ICJtYWluLCB2YWx1ZXM6IGZpcnN0IG5vZGUgaW4gY29weU9mUm9vdCAiOyBwcmludExpc3QoKihjb3B5T2ZSb290LmJlZ2luKCkpKTsgY291dCA8PCBlbmRsOwogICAgY291dCA8PCAibWFpbiwgcG9pbnRlcnM6IGNvcHlPZlJvb3QgIjsgcHJpbnRMaXN0UG9pbnRlcnMoY29weU9mUm9vdCk7IGNvdXQgPDwgZW5kbDsKICAgIGNvdXQgPDwgIm1haW4sIHBvaW50ZXJzOiBmaXJzdCBub2RlIGluIGNvcHlPZlJvb3QgIjsgcHJpbnRMaXN0UG9pbnRlcnMoKihjb3B5T2ZSb290LmJlZ2luKCkpKTsgY291dCA8PCBlbmRsOwoKICAgIGNvdXQgPDwgZW5kbCA8PCBlbmRsOwogICAgCglyZXR1cm4gMDsKfQoKdm9pZCBwcmludExpc3QobGlzdDxpbnQ+IGwpIHsKICAgIGNvdXQgPDwgInsiOwogICAgZm9yIChsaXN0PGludD46Oml0ZXJhdG9yIGl0ID0gbC5iZWdpbigpOyBpdCAhPSBsLmVuZCgpOyBpdCsrKSB7CiAgICAgICAgY291dCA8PCAqaXQgPDwgIiwgIjsKICAgIH0KICAgIGNvdXQgPDwgIn0iOwp9Cgp2b2lkIHByaW50TGlzdChsaXN0PCBsaXN0PGludD4gPiBsKSB7CiAgICBjb3V0IDw8ICJ7IjsKICAgIGZvciAobGlzdDwgbGlzdDxpbnQ+ID46Oml0ZXJhdG9yIGl0ID0gbC5iZWdpbigpOyBpdCAhPSBsLmVuZCgpOyBpdCsrKSB7CiAgICAgICAgcHJpbnRMaXN0KCppdCk7CiAgICB9CiAgICBjb3V0IDw8ICJ9IjsKfQoKdm9pZCBwcmludExpc3RQb2ludGVycyhsaXN0PGludD4gbCkgewogICAgY291dCA8PCAieyI7CiAgICBmb3IgKGxpc3Q8aW50Pjo6aXRlcmF0b3IgaXQgPSBsLmJlZ2luKCk7IGl0ICE9IGwuZW5kKCk7IGl0KyspIHsKICAgICAgICBjb3V0IDw8ICYqaXQgPDwgIiwgIjsKICAgIH0KICAgIGNvdXQgPDwgIn0iOwp9Cgp2b2lkIHByaW50TGlzdFBvaW50ZXJzKGxpc3Q8IGxpc3Q8aW50PiA+IGwpIHsKICAgIGNvdXQgPDwgInsiOwogICAgZm9yIChsaXN0PCBsaXN0PGludD4gPjo6aXRlcmF0b3IgaXQgPSBsLmJlZ2luKCk7IGl0ICE9IGwuZW5kKCk7IGl0KyspIHsKICAgICAgICBjb3V0IDw8ICYqaXQgPDwgIiwgIjsKICAgIH0KICAgIGNvdXQgPDwgIn0iOwp9
constructor, root is 0xbf8ed050
constructor, values: root {{2, 3, }}
constructor, values: first node in root {2, 3, }
constructor, pointers: root {0x8083068, }
constructor, pointers: first node in root {0x8083090, 0x8083080, }
main, root is 0xbf8ed050
main, values: root {{2, 3, }}
main, values: first node in root {2, 3, }
main, pointers: root {0x8083068, }
main, pointers: first node in root {0x8083010, 0x8083020, }
main, copyOfRoot is 0xbf8ed028
main, values: copyOfRoot {{2, 3, }}
main, values: first node in copyOfRoot {2, 3, }
main, pointers: copyOfRoot {0x80830c0, }
main, pointers: first node in copyOfRoot {0x8083080, 0x8083090, }