У меня есть следующая картина:
- У меня есть
std::vector
содержащий необработанные указатели на объекты (я знаю, что необработанные указатели являются "злыми", но это устаревшее программное обеспечение, которое необходимо поддерживать). - Теперь для каждого элемента в векторе мне нужно сделать тест, и если тест положительный, сделать что-то с указателем, удалить его, а затем удалить его из вектора:
Псевдокод:
for each pointer in vector
{
if (SomeTest(pointer))
{
DoSomething(pointer)
delete pointer
remove pointer from vector
}
}
Я не могу придумать хороший чистый код для этого.
Эта ссылка предоставляет различные подходы, но все они выглядят более или менее громоздкими для меня.
Громоздкое решение, которое я использую сейчас:
for(auto & p : v)
{
if (SomeTest(p))
{
DoSomething(p);
delete p;
p = nullptr;
}
}
v.erase(std::remove(v.begin(), v.end(), nullptr), v.end());