#include <iostream>
#include <string>
#include <vector>
#include <memory>
class MyAbstract
{
public:
virtual void doStuff() = 0;
virtual ~MyAbstract() {}
int id;
};
class MyConcrete : public MyAbstract
{
public:
MyConcrete(int id){this->id=id;}
void doStuff() { }
};
int main()
{
std::vector<std::unique_ptr<MyAbstract>> myList;
myList.emplace_back(std::make_unique<MyConcrete>(1));
myList.emplace_back(std::make_unique<MyConcrete>(2));
myList.emplace_back(std::make_unique<MyConcrete>(3));
for(auto & item : myList)
{
std::cout << item->id << "\n";
}
//Now delete one by
for (auto it = myList.begin(); it != myList.end();)
{
if ((*it)->id == 2)
{
it = myList.erase(it);
break;
}
else
++it;
}
std::cout << "After deletion:" << std::endl;
for(auto & item : myList)
{
std::cout << item->id << "\n";
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8bWVtb3J5PgogCmNsYXNzIE15QWJzdHJhY3QKewogICAgcHVibGljOgogCiAgICB2aXJ0dWFsIHZvaWQgZG9TdHVmZigpID0gMDsKICAgIHZpcnR1YWwgfk15QWJzdHJhY3QoKSB7fQogICAgCiAgICBpbnQgaWQ7Cn07CiAKY2xhc3MgTXlDb25jcmV0ZSA6IHB1YmxpYyBNeUFic3RyYWN0CnsKCXB1YmxpYzoKCU15Q29uY3JldGUoaW50IGlkKXt0aGlzLT5pZD1pZDt9Cgl2b2lkIGRvU3R1ZmYoKSB7IH0KCQp9OwogCmludCBtYWluKCkKewogICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPE15QWJzdHJhY3Q+PiBteUxpc3Q7CiAgICAKICAgIG15TGlzdC5lbXBsYWNlX2JhY2soc3RkOjptYWtlX3VuaXF1ZTxNeUNvbmNyZXRlPigxKSk7CiAgICBteUxpc3QuZW1wbGFjZV9iYWNrKHN0ZDo6bWFrZV91bmlxdWU8TXlDb25jcmV0ZT4oMikpOwogICAgbXlMaXN0LmVtcGxhY2VfYmFjayhzdGQ6Om1ha2VfdW5pcXVlPE15Q29uY3JldGU+KDMpKTsKIAogICAgZm9yKGF1dG8gJiBpdGVtIDogbXlMaXN0KQogICAgewogICAgICAgIHN0ZDo6Y291dCA8PCBpdGVtLT5pZCA8PCAiXG4iOwogICAgfQogICAgCiAgICAvL05vdyBkZWxldGUgb25lIGJ5IAoJZm9yIChhdXRvIGl0ID0gbXlMaXN0LmJlZ2luKCk7IGl0ICE9IG15TGlzdC5lbmQoKTspCgl7CgkJaWYgKCgqaXQpLT5pZCA9PSAyKQoJCXsKCQkJaXQgPSBteUxpc3QuZXJhc2UoaXQpOwoJCQlicmVhazsKCQl9CgkJZWxzZQoJCQkrK2l0OwoJfQoJCglzdGQ6OmNvdXQgPDwgIkFmdGVyIGRlbGV0aW9uOiIgPDwgc3RkOjplbmRsOwoJCiAgICBmb3IoYXV0byAmIGl0ZW0gOiBteUxpc3QpCiAgICB7CiAgICAgICAgc3RkOjpjb3V0IDw8IGl0ZW0tPmlkIDw8ICJcbiI7CiAgICB9Cn0=