Avatar billede simon.ulsnes Nybegynder
27. juni 2004 - 22:35 Der er 2 kommentarer

Gennemløb af linked list (moveNext etc.)

Hejsa der!
Jeg sidder og pusler med en lille linked list som bruger en streng som indeks (som et slags hashtabel).

Jeg har imidlertid et problem med min moveNext() iterator. Her er klassens definition:

template <class Type>
class List
{
    private:
        ListNode<Type> *first;
        int num_nodes;

    public:
        List();
        ~List();
        Type* operator[](char *) const;

        int count() const { return num_nodes; }

        ListNode<Type> *current;
        bool moveNext();
        void reset();

        void add(char*, Type*);
        void remove(char *name);
        Type* get(char *name);
};

operator[](char*) og get(char*) er det samme, de er der bare for nemhedens skyld. :-)

Her er de relevante funktioner:

template <class Type>
void List::reset() { current = NULL; }

template <class Type>
bool List::moveNext()
{
    if (current == NULL)
    {
        current = first;
        return true;
    }
    else
    {
        current = current->next;
        if (current == NULL)
            return false;
        return true;
    }
}

Problemet er som sagt moveNext() - den springer så vidt jeg kan se over det første objekt i listen.

Hvis det skulle have interesse er her ListNode<Type>:

template <class Type>
class ListNode
{
    friend class List<Type>;

    public:
        char *name;
        Type *node;
        ListNode<Type> *next;

        ListNode(char *na, Type *no) : name(na), node(no) {}
        ~ListNode() { delete node; }
};

På forhånd tak!

- Simon
Avatar billede arne_v Ekspert
27. juni 2004 - 22:40 #1
Er current rent faktisk NULL når du vil have fat i den første ?
(får du kaldt reset lige inden ?)
Avatar billede simon.ulsnes Nybegynder
28. juni 2004 - 10:27 #2
Jep, det gør jeg. Det glemte jeg selvfølgelig at sige.

Er der i øvrigt ikke en smartere måde at gøre det på så man ikke er afhængig af at brugere resetter pointeren?

- Simon
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