Namespaces
Variants

std::inplace_vector<T,N>:: erase

From cppreference.net

constexpr iterator erase ( const_iterator pos ) ;
(1) (seit C++26)
constexpr 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 Position pos .
2) Entfernt die Elemente im Bereich [ first , last ) .

Iteratoren (einschließlich des end() Iterators) und Referenzen auf die Elemente an oder nach dem Löschpunkt werden ungültig.

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 No-Op.

Inhaltsverzeichnis

Parameter

pos - Iterator auf das zu entfernende Element
first, last - Das Paar von Iteratoren, das den Bereich der zu entfernenden Elemente definiert
Typanforderungen
-
Wenn T nicht MoveAssignable ist, ist das Verhalten undefiniert.

Rückgabewert

Iterator, der dem letzten entfernten Element folgt.

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

Ausnahmen

Wirft keine Ausnahme, es sei denn, eine Ausnahme wird vom Zuweisungsoperator von T geworfen.

Komplexität

Linear: Die Anzahl der Aufrufe des Destruktors von T entspricht der Anzahl der gelöschten Elemente, der Zuweisungsoperator von T wird so oft aufgerufen, wie der Anzahl der Elemente im Vektor nach den gelöschten Elementen entspricht.

Hinweise

Wenn Containerelemente basierend auf einem Prädikat gelöscht werden müssen, wird anstatt den Container zu iterieren und unary erase aufzurufen, generell die Iteratorbereich-Überladung mit std::remove()/std::remove_if() verwendet, um die Anzahl der Verschiebungen der verbleibenden (nicht gelöschten) Elemente zu minimieren — dies ist das Erase-Remove Idiom. std::erase_if() ersetzt das Erase-Remove Idiom.

Beispiel

#include <inplace_vector>
#include <print>
int main()
{
    std::inplace_vector<int, 10> v{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    std::println("{}", v);
    v.erase(v.begin());
    std::println("{}", v);
    v.erase(v.begin() + 2, v.begin() + 5);
    std::println("{}", v);
    // Alle geraden Zahlen löschen
    for (std::inplace_vector<int, 10>::iterator 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
(Funktions-Template)
löscht den Inhalt
(öffentliche Elementfunktion)