C ++:从“for each”循环中删除map中的值

时间:2012-04-17 18:19:45

标签: c++ stl map foreach function-pointers

对于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(), ???);

4 个答案:

答案 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有什么用?

相关问题