Namespaces
Variants

std::hive<T,Allocator>::erase

Von de.cppreference.net

 
 
 
 
iterator erase( const_iterator pos );
(1) (seit C++26)
iterator erase( const_iterator first, const_iterator last );
(2) (seit C++26)

Löscht die angegebenen Elemente aus dem Container.

1) Entfernt das Element an pos.
2) Entfernt die Elemente im Bereich [first, last).

Iteratoren und Referenzen auf das gelöschte Element werden ungültig. Wenn das Element das letzte Element im Container ist, wird der end() Iterator ebenfalls ungültig. Andere Referenzen und Iteratoren sind nicht betroffen.

Der Iterator pos muss gültig und dereferenzierbar sein. Daher kann der end() Iterator (der gültig, aber nicht dereferenzierbar ist) nicht als Wert für pos verwendet werden.

Der Iterator first muss nicht dereferenzierbar sein, wenn first == last: das Löschen eines leeren Bereichs ist eine Nulloperation.

Parameter

pos - Iterator auf das zu entfernende Element
first, last - das Paar von Iteratoren, das den Bereich der zu entfernenden Elemente definiert

Rückgabewert

Iterator nach dem letzten entfernten Element.

1) Wenn pos auf das letzte Element verweist, wird der end() Iterator zurückgegeben.
2) Wenn last == end() vor dem Entfernen, wird der aktualisierte end() Iterator zurückgegeben.
Wenn [first, last) ein leerer Bereich ist, wird last zurückgegeben.

Komplexität

1) Konstant.
2) Linear in der Anzahl der gelöschten Elemente.

Zusätzlich, wenn durch den Funktionsaufruf aktive Blöcke leer von Elementen werden, — im schlimmsten Fall linear in der Anzahl der Elementblöcke.

Hinweise

Wenn Containerelemente basierend auf einem Prädikat gelöscht werden müssen, wird anstatt den Container zu durchlaufen und das unäre erase aufzurufen, im Allgemeinen die Iteratorbereichsüberladung mit std::remove()/std::remove_if() verwendet, um die Anzahl der Verschiebungen der verbleibenden (nicht entfernten) Elemente zu minimieren, — dies ist das Entfernen-Löschen-Idiom (erase-remove idiom). std::erase_if() ersetzt das Entfernen-Löschen-Idiom.

Beispiel

#include <hive>
#include <print>

int main()
{
    std::hive v{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    std::println("{}", v);

    v.erase(v.begin());
    std::println("{}", v);

    v.erase(std::next(v.begin(), 2), std::next(v.begin(), 5));
    std::println("{}", v);

    // Erase all even numbers
    for (auto it{v.begin()}; it != v.end();)
        if (*it % 2 == 0)
            it = v.erase(it);
        else
            ++it;
    std::println("{}", v);
}

Ausgabe:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 6, 7, 8, 9]
[1, 7, 9]

Siehe auch

löscht alle Elemente, die bestimmte Kriterien erfüllen
(Funktionstemplate)
leert den Inhalt
(öffentliche Memberfunktion)