Il vettore all'interno di una mappa è chiaro?
Domanda
Solo una domanda veloce, se hai detto:
using namespace std;
map< int, vector< string > > map1;
.
o forse anche:
map< int, map< int, vector< string > > > map2;
.
E così hai la giusta idea:
map< int, map< int, map< int, vector< string > > > > map3;
.
Se faccio solo:
map1.clear();
map2.clear();
map3.clear();
.
È al sicuro in quanto svuoterà tutto sulla mappa e le sue mappe annidate, vettori, elenchi, ecc.?
Nota: So che se usi i puntatori di cui hai bisogno per passare manualmente ed eliminare o se la mappa passa da portata, dovrebbe andare bene anche io sono solo particolarmente interessato a questo caso quando è in ambito e sullo stack.
Soluzione
Sì, una mappa distruggerà tutti i componenti.
Se i suoi componenti sono contenitori STL, i loro distruttori cancellano i contenitori.
Leggi di più su contenitori STL in particolare su Destructor of std::map
Altri suggerimenti
Sì, questo è perfettamente sicuro.I contenitori STL si prendono cura della gestione della memoria.
Tuttavia, se conservi puntatori agli oggetti che hai assegnato, devi anche eliminarli da soli:
std::vector<MyClass*> vec;
vec.push_back(new MyClass());
vec.clear(); // you get a memory leak here because you did not delete the object you allocated.
.