#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
class Person {
string name;
public:
Person(string n) : name(n) {}
string getName() const { return name; }
};
const Person* make_ptr(const Person* p) { return p; }
const Person* make_ptr(const Person& p) { return &p; }
template<typename T, typename R>
void xform(vector<T>& from, vector<R>& to) {
transform(from.begin(), from.end(), back_inserter(to),
[&](T &p) { return make_ptr(p)->getName(); }
);
}
int main() {
Person p0("quick");
Person p1("brown");
Person p2("fox");
Person p3("jumps");
Person p4("over");
Person p5("the");
Person p6("lazy");
Person p7("dog");
vector<Person> vp;
vector<Person*> vpp;
vp.push_back(p0);
vpp.push_back(&p0);
vp.push_back(p1);
vpp.push_back(&p1);
vp.push_back(p2);
vpp.push_back(&p2);
vp.push_back(p3);
vpp.push_back(&p3);
vp.push_back(p4);
vpp.push_back(&p4);
vp.push_back(p5);
vpp.push_back(&p5);
vp.push_back(p6);
vpp.push_back(&p6);
vp.push_back(p7);
vpp.push_back(&p7);
vector<string> res;
xform(vp, res);
xform(vpp, res);
for (int i = 0 ; i != res.size() ; i++) {
cout << res[i] << endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIFBlcnNvbiB7CglzdHJpbmcgbmFtZTsKcHVibGljOgoJUGVyc29uKHN0cmluZyBuKSA6IG5hbWUobikge30KCXN0cmluZyBnZXROYW1lKCkgY29uc3QgeyByZXR1cm4gbmFtZTsgfQp9OwoKY29uc3QgUGVyc29uKiBtYWtlX3B0cihjb25zdCBQZXJzb24qIHApIHsgcmV0dXJuIHA7IH0KY29uc3QgUGVyc29uKiBtYWtlX3B0cihjb25zdCBQZXJzb24mIHApIHsgcmV0dXJuICZwOyB9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBSPgp2b2lkIHhmb3JtKHZlY3RvcjxUPiYgZnJvbSwgdmVjdG9yPFI+JiB0bykgewoJdHJhbnNmb3JtKGZyb20uYmVnaW4oKSwgZnJvbS5lbmQoKSwgYmFja19pbnNlcnRlcih0byksCiAgICAgICAgWyZdKFQgJnApIHsgcmV0dXJuIG1ha2VfcHRyKHApLT5nZXROYW1lKCk7IH0KICAgICk7Cn0KCmludCBtYWluKCkgewoJUGVyc29uIHAwKCJxdWljayIpOwoJUGVyc29uIHAxKCJicm93biIpOwoJUGVyc29uIHAyKCJmb3giKTsKCVBlcnNvbiBwMygianVtcHMiKTsKCVBlcnNvbiBwNCgib3ZlciIpOwoJUGVyc29uIHA1KCJ0aGUiKTsKCVBlcnNvbiBwNigibGF6eSIpOwoJUGVyc29uIHA3KCJkb2ciKTsKCXZlY3RvcjxQZXJzb24+IHZwOwoJdmVjdG9yPFBlcnNvbio+IHZwcDsKCXZwLnB1c2hfYmFjayhwMCk7Cgl2cHAucHVzaF9iYWNrKCZwMCk7Cgl2cC5wdXNoX2JhY2socDEpOwoJdnBwLnB1c2hfYmFjaygmcDEpOwoJdnAucHVzaF9iYWNrKHAyKTsKCXZwcC5wdXNoX2JhY2soJnAyKTsKCXZwLnB1c2hfYmFjayhwMyk7Cgl2cHAucHVzaF9iYWNrKCZwMyk7Cgl2cC5wdXNoX2JhY2socDQpOwoJdnBwLnB1c2hfYmFjaygmcDQpOwoJdnAucHVzaF9iYWNrKHA1KTsKCXZwcC5wdXNoX2JhY2soJnA1KTsKCXZwLnB1c2hfYmFjayhwNik7Cgl2cHAucHVzaF9iYWNrKCZwNik7Cgl2cC5wdXNoX2JhY2socDcpOwoJdnBwLnB1c2hfYmFjaygmcDcpOwoJdmVjdG9yPHN0cmluZz4gcmVzOwoJeGZvcm0odnAsIHJlcyk7Cgl4Zm9ybSh2cHAsIHJlcyk7CiAgICBmb3IgKGludCBpID0gMCA7IGkgIT0gcmVzLnNpemUoKSA7IGkrKykgewogICAgCWNvdXQgPDwgcmVzW2ldIDw8IGVuZGw7CiAgICB9CglyZXR1cm4gMDsKfQ==