Avatar billede jakobverner Nybegynder
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;
}
Avatar billede jakobverner Nybegynder
29. maj 2007 - 09:41 #1
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++;
        }
    }
Avatar billede jakobverner Nybegynder
29. maj 2007 - 13:08 #2
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;
}
Avatar billede jakobverner Nybegynder
29. maj 2007 - 13:08 #3
Jamen det virker jo...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester