0

aの場合、呼び出しstd::vector<double*> v;て s を削除できます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

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 に答える