#include <iostream>
#include <vector>
#include <list>
#include <string>
#include <utility>
#include <memory>
struct Person
{
std::string name;
std::vector<Person*> freunde;
};
struct Welt
{
std::vector<std::unique_ptr<Person>> bewohner;
Person* neuer_bewohner(std::string name);
};
Person* Welt::neuer_bewohner(std::string name)
{
std::unique_ptr<Person> p (new Person);
p->name = move(name);
bewohner.push_back(move(p));
return bewohner.back().get();
}
void befreunde(Person* wen, Person* mit)
{
// TODO: ueberlegen, ob und wie man abfangen soll,
// falls die zwei personen schon befreundet sind
// oder ob wen==mit gilt.
wen->freunde.push_back(mit);
mit->freunde.push_back(wen);
}
int main()
{
Welt w;
Person* hans = w.neuer_bewohner("Hans Wurst");
Person* daniel = w.neuer_bewohner("Daniel Kaese");
befreunde(hans,daniel);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8bGlzdD4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPHV0aWxpdHk+CiNpbmNsdWRlIDxtZW1vcnk+CiAKc3RydWN0IFBlcnNvbgp7CiAgc3RkOjpzdHJpbmcgbmFtZTsKICBzdGQ6OnZlY3RvcjxQZXJzb24qPiBmcmV1bmRlOwp9OwogCnN0cnVjdCBXZWx0CnsKICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8UGVyc29uPj4gYmV3b2huZXI7CiAKICBQZXJzb24qIG5ldWVyX2Jld29obmVyKHN0ZDo6c3RyaW5nIG5hbWUpOwp9OwogClBlcnNvbiogV2VsdDo6bmV1ZXJfYmV3b2huZXIoc3RkOjpzdHJpbmcgbmFtZSkKewogIHN0ZDo6dW5pcXVlX3B0cjxQZXJzb24+IHAgKG5ldyBQZXJzb24pOwogIHAtPm5hbWUgPSBtb3ZlKG5hbWUpOwogIGJld29obmVyLnB1c2hfYmFjayhtb3ZlKHApKTsKICByZXR1cm4gYmV3b2huZXIuYmFjaygpLmdldCgpOwp9CiAKdm9pZCBiZWZyZXVuZGUoUGVyc29uKiB3ZW4sIFBlcnNvbiogbWl0KQp7CiAgLy8gVE9ETzogdWViZXJsZWdlbiwgb2IgdW5kIHdpZSBtYW4gYWJmYW5nZW4gc29sbCwKICAvLyBmYWxscyBkaWUgendlaSBwZXJzb25lbiBzY2hvbiBiZWZyZXVuZGV0IHNpbmQKICAvLyBvZGVyIG9iIHdlbj09bWl0IGdpbHQuCiAgd2VuLT5mcmV1bmRlLnB1c2hfYmFjayhtaXQpOwogIG1pdC0+ZnJldW5kZS5wdXNoX2JhY2sod2VuKTsKfQogCmludCBtYWluKCkKewogIFdlbHQgdzsKICBQZXJzb24qIGhhbnMgICA9IHcubmV1ZXJfYmV3b2huZXIoIkhhbnMgV3Vyc3QiKTsKICBQZXJzb24qIGRhbmllbCA9IHcubmV1ZXJfYmV3b2huZXIoIkRhbmllbCBLYWVzZSIpOwogIGJlZnJldW5kZShoYW5zLGRhbmllbCk7Cn0gCg==