Esatto. Forse però dovresti anche decrementare dsize, visto che quando inserisci un elemento lo incrementi.Originariamente inviato da Neptune
Ora il mio arduo () compito è stato quello di sviluppare la funzione di erase, che è si fatta:
Il dubbio è questo, la funzione di cancellazione non fa altro che vedere se l'elemento che vuoi cancellare effettivamente esiste con la prima condizione, se esiste ne cerca la posizione nella tabella (si lo so non è molto ottimizzato questo codice), dealloca (con delete) la coppia mypair (che ti ritorna da find) e poi setta a NULL il puntatore nella tabella.codice:template<class K, class E> void hash_table<K,E>::erase(const K& k) { if( find(k) != NULL) { // search the table for a matching element int b = search(k); delete find(k); table[b] = NULL; } }
E' tutto giusto così?
Cioè se io mettessi solo a null il puntatore sulla tabella ma non mettessi quel delete rimarebbe allocato il mio spazio di memoria no?
Dovrebbe essere giusto.
La funzione find è questa:
Ovvero non dovrebbe far altro che ritornare, nel caso esiste il puntatore proprio all'indirizzo della coppia mypair.codice:template<class K, class E> mypair<K, E>* hash_table<K,E>::find(const K& the_key) { // search the table int b = search(the_key); // see if a match was found at table[b] if (table[b] == NULL || table[b]->first != the_key) return NULL; // no match return table[b]; // matching pair }
Dite che è giusto? con i puntatori non si è mai sicuri al 100%![]()