Предположим, у меня есть карта STL, где значения являются указателями, и я хочу удалить их все. Как я могу представить следующий код, но используя std :: for_each? Я рад за решения использовать Boost.Как использовать for_each для удаления каждого значения на карте STL?
for(stdext::hash_map<int, Foo *>::iterator ir = myMap.begin();
ir != myMap.end();
++ir)
{
delete ir->second; // delete all the (Foo *) values.
}
(я нашел подталкивания-х checked_delete
, но я не знаю, как применить это к pair<int, Foo *>
, который представляет итератор).
(Кроме того, для целей этого вопроса игнорируйте тот факт, что хранение необработанных указателей, требующих удаления в контейнере STL, не очень разумно).
Примечание: после этого я нашел и перечислил однострочный ответ ниже ... но код довольно ужасный, поэтому я принял более здравый ответ GMan.
Приятное использование операции preincrement на вашем итераторе! –