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

fue*_*zig 0 c++ foreach stl function-pointers map

对于std::vector<double*> v;我可以double通过调用删除s

std::for_each(v.begin(), v.end(), (void(*)(void* a))operator delete);
Run Code Online (Sandbox Code Playgroud)

现在,如果我有std::map<int, double*> m;,我可以在不使用显式循环,增强或非标准STL扩展的情况下执行类似的操作吗?即什么是???

std::for_each(m.begin(), m.end(), ???);
Run Code Online (Sandbox Code Playgroud)

Pup*_*ppy 10

不要打扰.std::map<int, std::unique_ptr<double>>.不再需要delete手动,你可以只是clear()地图.智能指针> 每次显式删除.

  • 我正在维护现有代码,因此更改类型将不容易。除此之外,我发现这个问题本身很有趣。(最后,我可以编写一个简单的for循环。) (2认同)

Rob*_*obᵩ 6

如果您使用的是C++ 11,则可以使用基于范围的for.

for(auto& pair : m) delete pair.second;
Run Code Online (Sandbox Code Playgroud)

如果您使用的是pre-C++ 11标准,则可以使用仿函数:

struct delete_second {
  void operator()(std::pair<int, double*> p) { delete p.second; }
};

...

  std::for_each(m.begin(), m.end(), delete_second());
Run Code Online (Sandbox Code Playgroud)