std::deque::erase und Elementreihenfolge



  • Hallo zusammen,

    mal eine Frage an die Standard-Füchse:
    Ich habe eine sortierte std::deque , von der ich am Anfang Einträge entfernen muss. Dabei darf die Sortierung auf keinen Fall gebrochen werden. Ich finde nirgends Hinweise darauf, wie sich erase hier verhält. Kann ich davon ausgehen, dass nur die zu entfernenden Elemente vom Anfang entfernt werden und die restlichen nicht angefasst werden?



  • §23.3.3.4/4 erase schrieb:

    Effects:
    An erase operation that erases the last element of a deque invalidates only the past-the-end
    iterator and all iterators and references to the erased elements. An erase operation that erases the first
    element of a deque but not the last element invalidates only the erased elements
    . An erase operation
    that erases neither the first element nor the last element of a deque invalidates the past-the-end iterator
    and all iterators and references to all the elements of the deque.

    Da keine anderen Iteratoren invalidiert werden, werden wohl keine Element bewegt.



  • Gut, Danke.



  • Mir ist überhaupt kein Container bekannt der beim Einfügen bzw. Entfernen von Elementen andere Elemente umordnet.
    (Ausgenommen Container wo sowieso keine Ordnung definiert ist wie die Hash-Sets/-Maps - da kann das durch re-hashing natürlich passieren.)



  • Vorstellbar ist das schon. Angenommen, ich habe einen std::vector mit 100 Elementen, aus dem ich jetzt Element 3 lösche. Statt 96 Elemente um jeweils eine Position nach vorn zu verschieben könnte er das letzte Element an Position 3 kopieren und die Größe um 1 verringern. Ich kenne den Standard nicht gut genug und weiß daher nicht, ob er das erlaubt oder nicht.



  • Nein, das ist nicht erlaubt.



  • DocShoe schrieb:

    Vorstellbar ist das schon. Angenommen, (...)

    Ist mir schon klar dass das ne "fesche" Optimierung wäre, aber die ist wie Kellerautomat schon geschrieben hat nicht erlaubt.

    OK, ich hätte schreiben sollen: Mir ist überhaupt kein *STL-*Container bekannt der (...)


Anmelden zum Antworten