список указателей на объекты и удаление из списка

170
09 января 2019, 14:30

Как получить доступ к ним по итератору, чтобы можно было удалять объект из коллекции? struct Base { virtual void doit() { cout << "Base!\n"; } virtual ~Base() { cout << "deleted...\n"; } };

struct Derived: public Base
{
    void doit() override { cout << "Derived!\n"; }
};

int main(int argc, const char * argv[])
{
    list <unique_ptr<Base>> v;
    v.emplace_back(new Base);
    v.emplace_back(new Derived);
    v.emplace_back(new Base);
    v.emplace_back(new Derived);
    v.emplace_back(new Base);
    for(auto& o: v) o->doit();
}

Как получить доступ к объектам по итератору, чтобы можно было удалять объект из коллекции?

Как заменить строчку

 for(auto& o: v) o->doit();

на цикл

for (auto it = v.begin(); it != v.end(); ++it)
    {
        it->doit();
    }

Или как мне удалить в цикле for(auto& o: v) элемент из коллекции v?

READ ALSO
Y=1.QNan. C++ в чем может быть причина?

Y=1.QNan. C++ в чем может быть причина?

Попытался сделать задачу из интернета на If,ElseВ итоге X выводится нормально,а Y с QNan

193
esc последовательность в cout

esc последовательность в cout

Этот код все делает правильно: очищает экран, и вывод с первой строки, первой позиции ячейки:

158
Thread.sleep() работает не так, как надо

Thread.sleep() работает не так, как надо

Пишу пошаговую 2D игру, где персонаж передвигается в строго заданном направлении по клеткам поляИспользую MouseListener

177
Чтение атрибутов из MANIFEST.MF

Чтение атрибутов из MANIFEST.MF

При компиляции Java приложения вписываются данные в MANIFESTMF файл которые потом должны использоваться при запуске приложения

187