0

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

std::for_each(v.begin(), v.end(), (void(*)(void* a))operator delete);

现在,如果我有std::map<int, double*> m;,我可以在不使用显式循环、boost 或非标准 STL 扩展的情况下做类似的事情吗????即里面有什么

std::for_each(m.begin(), m.end(), ???);
4

4 回答 4

10

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

于 2012-04-17T18:30:28.280 回答
6

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

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());
于 2012-04-17T18:27:49.650 回答
3

使用 C+11,您可以: std::for_each(m.begin(), m.end(), [](std::pair<int,double*> p) { delete p.second; });

于 2012-04-17T18:28:02.473 回答
0

删除 p.second 而不从地图中删除条目有什么用?

于 2012-08-02T13:20:19.047 回答