これで良いのではないかと思ってますが、間違ってたらつっこんでください…。
vector
for (vector<Hoge *>::iterator it = hoges.begin(); it != hoges.end();) {
delete *it;
it = hoges.erase(it);
}
map
for (map<int, Hoge *>::iterator it = hoges.begin(); it != hoges.end(); it++) {
delete it->second;
}
hoges.clear();
secondが値を指しているということなんですかね。わかりにくいですね。なんでこんな名前にしたんですかね。
参考:
c++ - How to erase & delete pointers to objects stored in a vector? - Stack Overflow
C++とのつきあい方(16)