29. maj 2007 - 09:14
Der er
2 kommentarer og 1 løsning
Slet det iteratoren peger på?
Hej folkens Jeg laver et HashTable, og arbejder på en funktion, der finder en værdi i et HashTable, og sletter den hvis boolean'en "erase" er true. Funktionen finder fint værdien, men hvordan sletter jeg dét som iteratoren peger på? Her er min funktion: template <typename itemType, typename HashFunc> bool HashTable<itemType, HashFunc>::find(const itemType & itemValue, bool erase) { int hashIndex = int (hf(itemValue)%buckets.size()); list<itemType>& myBucket = buckets[hashIndex]; list<itemType>::iterator bucketIter; bucketIter = myBucket.begin(); while(bucketIter != myBucket.end()) { if(*bucketIter == itemValue) if(erase) bucketIter.???? //Slet det "bucketIter" peger på? return true; else bucketIter++; } return false; }
Annonceindlæg fra Cepheo
Det while-loop som spørgsmålet angår er blevet lidt for stillet op, jeg troede ellers jeg havde tjekket, men her kommer det lige igen med rigtig opstilling og med tuborg-klammer: while(bucketIter != myBucket.end()) { if(*bucketIter == itemValue) { if(erase) { bucketIter.???? //Slet det "bucketIter" peger på? } return true; } else { bucketIter++; } }
Hmm, fandt selv ud af det: Her er min funktion: template <typename itemType, typename HashFunc> bool HashTable<itemType, HashFunc>::find(const itemType & itemValue, bool erase) { int hashIndex = int (hf(itemValue)%buckets.size()); list<itemType>& myBucket = buckets[hashIndex]; list<itemType>::iterator bucketIter; bucketIter = myBucket.begin(); while(bucketIter != myBucket.end()) { if(*bucketIter == itemValue) { if(erase) buckets[hashIndex].erase(bucketIter); // TILFØJET return true; } else bucketIter++; } return false; }