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 DE-CIX
Edge computing: behandling ved kilden
Edge computing revolutionerer den måde, data behandles på, ved at bringe kapacitet og ydeevne tættere på dér, hvor der er behov for det.
15. april 2025
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; }