Iterator Null



  • Hi,

    Eine Funktion gibt Daten vom Typ vector<float>::iterator zurück. Was kann ich im Fehlerfall zurückgeben? Geht folgendes:
    return(NULL); bzw. return((vector<float>::iterator)0);

    lg



  • - eine Exception werfen
    - deinVector.end()



  • Man kann im allgemeinen davon ausgehen, dass Iteratoren keine Zeiger sind. Es dürfte sich zwar bei den meisten Implementierungen von std::vector durchgesetzt haben, dass iterator ein T* ist, aber verlassen würde ich mich darauf nicht. (Der Standard sagt nichts darüber aus, was iterator konkret sein muss.)

    end() Zurückgeben ist oft bei Algorithmen sinnvoll, z.B. bei einer Suche.
    Exceptions habe ich im Zusammenhang mit Iteratoren nocht nicht verwendet, können aber unter Umständen auch sinnvoll sein.
    Vielleicht tut's auch ein assert(), kommt auf deinen konkreten Fall an.



  • Wenn es keine Exception sein soll ist am besten container.end() zurück zu geben (wie bereits schon geschrieben).
    Grund: Mann muss immer einen definierten Iterator zurück geben. Definierte Iteratoren zeigen immer auf bestehende Elemente eines Containers (Als "Fehlerrückgabewert" natürlich schlecht), bis auf eine Ausnahme : Der Iterator der auf end() zeigt. Der zeigt sozusagen auf das Element hinter dem letzten Element (das es ja in wirklichkeit garnicht gibt). Wie das intern dargestellt wird ist implementationsspezifisch - braucht auch niemand zu interessieren - es geht.


  • Mod

    Manche Container definieren auch einen eigenen Iterator != end() dafür, z.B. npos bei std::string.



  • SeppJ schrieb:

    Manche Container definieren auch einen eigenen Iterator != end() dafür, z.B. npos bei std::string.

    npos ist kein Iterator, sondern eine numerische Konstante.


  • Mod

    LordJaxom schrieb:

    SeppJ schrieb:

    Manche Container definieren auch einen eigenen Iterator != end() dafür, z.B. npos bei std::string.

    npos ist kein Iterator, sondern eine numerische Konstante.

    Ups, stimmt.


Anmelden zum Antworten