对于std::vector<double*> v;
我可以通过调用
double
std::for_each(v.begin(), v.end(), (void(*)(void* a))operator delete);
现在,如果我有std::map<int, double*> m;
,我可以在不使用显式循环,增强或非标准STL扩展的情况下执行类似操作吗?即
???
是什么
std::for_each(m.begin(), m.end(), ???);
答案 0 :(得分:10)
不要打扰。 std::map<int, std::unique_ptr<double>>
。不再需要手动delete
,您只需clear()
地图。智能指针&gt;每次显式删除 。
答案 1 :(得分:6)
如果您使用的是C ++ 11,则可以使用基于范围的。
for(auto& pair : m) delete pair.second;
如果您使用的是预C ++ 11标准,则可以使用仿函数:
struct delete_second {
void operator()(std::pair<int, double*> p) { delete p.second; }
};
...
std::for_each(m.begin(), m.end(), delete_second());
答案 2 :(得分:3)
使用C + 11,您可以:
std::for_each(m.begin(), m.end(), [](std::pair<int,double*> p) { delete p.second; });
答案 3 :(得分:0)
如果不删除地图中的条目,删除p.second有什么用?