#include <iostream>
#include <vector>
using namespace std;
class X : public vector<int> { };
void show(const X& e)
{
size_t n = e.size();
for (size_t i=0; i<n; i++) {
cout << " [" << i << "] = " << e[i] << "\n";
}
cout << "\n";
}
void show(const X& e1, const X& e2, const vector<X>& list)
{
cout << "--------------\n";
cout << "e1:" << e1.size() << "\n";
show(e1);
cout << "e2:" << e2.size() << "\n";
show(e2);
size_t n = list.size();
for (size_t i=0; i<n; i++) {
cout << "list[" << i << "]:" << list[i].size() << "\n";
show(list[i]);
}
}
int main() {
X e1, e2;
vector<X> list;
cout << "(1)初期状態\n";
e1.push_back(0);
e2.push_back(1);
e2.push_back(2);
list.push_back(e1);
list.push_back(e2);
show(e1, e2, list);
cout << "(2)呼び出し元の実体を拡大\n";
e1.push_back(3);
e2.push_back(4);
show(e1, e2, list);
cout << "(3)vector の要素を拡大\n";
list[0].push_back(5);
list[1].push_back(6);
show(e1, e2, list);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgWCA6IHB1YmxpYyB2ZWN0b3I8aW50PiB7IH07Cgp2b2lkIHNob3coY29uc3QgWCYgZSkKewoJc2l6ZV90IG4gPSBlLnNpemUoKTsKCWZvciAoc2l6ZV90IGk9MDsgaTxuOyBpKyspIHsKCQljb3V0IDw8ICIgWyIgPDwgaSA8PCAiXSA9ICIgPDwgZVtpXSA8PCAiXG4iOwoJfQoJY291dCA8PCAiXG4iOwp9Cgp2b2lkIHNob3coY29uc3QgWCYgZTEsIGNvbnN0IFgmIGUyLCBjb25zdCB2ZWN0b3I8WD4mIGxpc3QpCnsKCWNvdXQgPDwgIi0tLS0tLS0tLS0tLS0tXG4iOwoJY291dCA8PCAiZTE6IiA8PCBlMS5zaXplKCkgPDwgIlxuIjsKCXNob3coZTEpOwoKCWNvdXQgPDwgImUyOiIgPDwgZTIuc2l6ZSgpIDw8ICJcbiI7CglzaG93KGUyKTsKCglzaXplX3QgbiA9IGxpc3Quc2l6ZSgpOwoJZm9yIChzaXplX3QgaT0wOyBpPG47IGkrKykgewoJCWNvdXQgPDwgImxpc3RbIiA8PCBpIDw8ICJdOiIgPDwgbGlzdFtpXS5zaXplKCkgPDwgIlxuIjsKCQlzaG93KGxpc3RbaV0pOwoJfQp9CgppbnQgbWFpbigpIHsKCVggZTEsIGUyOwoJdmVjdG9yPFg+IGxpc3Q7CgkKCWNvdXQgPDwgIigxKeWIneacn+eKtuaFi1xuIjsKCWUxLnB1c2hfYmFjaygwKTsKCWUyLnB1c2hfYmFjaygxKTsKCWUyLnB1c2hfYmFjaygyKTsKCWxpc3QucHVzaF9iYWNrKGUxKTsKCWxpc3QucHVzaF9iYWNrKGUyKTsKCXNob3coZTEsIGUyLCBsaXN0KTsKCQoJY291dCA8PCAiKDIp5ZG844Gz5Ye644GX5YWD44Gu5a6f5L2T44KS5ouh5aSnXG4iOwoJZTEucHVzaF9iYWNrKDMpOwoJZTIucHVzaF9iYWNrKDQpOwoJc2hvdyhlMSwgZTIsIGxpc3QpOwoKCWNvdXQgPDwgIigzKXZlY3RvciDjga7opoHntKDjgpLmi6HlpKdcbiI7CglsaXN0WzBdLnB1c2hfYmFjayg1KTsKCWxpc3RbMV0ucHVzaF9iYWNrKDYpOwoJc2hvdyhlMSwgZTIsIGxpc3QpOwoKCXJldHVybiAwOwp9