Legal, Illegal oder Äquivalent



  • Hi,

    der titel sagt alles:

    int Position = 3; 
    
    MyVector.erase (&MyVector[Position]);  
    
    MyVector.erase( MyVector.begin() + Position);
    

    und nun meine frage: sind die beiden Mehtoden Legal, Illegal oder Äquivalent?



  • Hi,

    nein, die erste Variante löscht nur ein Element, die zweite alles vom Anfang bis zu diesem Element.

    ChrisM



  • quatsch.



  • ChrisM schrieb:

    Hi,

    nein, die erste Variante löscht nur ein Element, die zweite alles vom Anfang bis zu diesem Element.

    ChrisM

    outch, total daneben, beide tun das selbe 🙂



  • jetzt ist nur meine frage: was ist legal und was illegal oder ob die beiden sogar äquivalent sind



  • Hallo,
    *wenn* beide Varianten funktionieren, dann tun sie das selbe und sind äquivalent. Allerdings ist es implementationsabhängig ob die erste Variante funktioniert. Die erste Variante funktioniert nur dann, wenn vector<T>::iterator == T*, wenn ein vector::iterator also nichts weiter als ein Pointer auf Elementtyp ist. Dies muss aber keinesfalls so sein. Viele STL-Implementationen (z.B. STLPort) gehen hier einen anderen Weg. Ist ein vector::iterator hier ein eigener Typ, dann funktioniert die erste Variante nicht.



  • Manch einer könnte jetzt daraus verstehen, dass es egal ist, solange der eigene Compiler es kann. Aber um es noch mal zu betonen: Wirklich standardkonform, ist nur die Variante über begin().

    Mein gcc 3.3.2 compiliert es zB. nicht.



  • Hi,

    sorry für meine Falschaussage oben, ich hab statt dem + ein Komma gelesen und dann gedacht, hier wird Anfang und Ende der zu löschenden Sequenz angegeben. 🙄

    ChrisM



  • DrGreenthumb schrieb:

    Manch einer könnte jetzt daraus verstehen, dass es egal ist, solange der eigene Compiler es kann. Aber um es noch mal zu betonen: Wirklich standardkonform, ist nur die Variante über begin().

    Mein gcc 3.3.2 compiliert es zB. nicht.

    wieso? nur weil gcc das andere nicht kann ist es kein standard oder wie?



  • =Seraph= schrieb:

    wieso? nur weil gcc das andere nicht kann ist es kein standard oder wie?

    nein. das war nur ein beispiel wo diese falsche version nicht funktioniert. denn sie funktioniert auf einigen compilern - aber eben nicht auf allen (weil sie falsch ist)


Anmelden zum Antworten