std::inplace_vector<T,N>::erase
| 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.
[first, last).Iteratoren (einschließlich des end()-Iterators) und Referenzen auf Elemente an oder nach der Stelle des Löschens 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 hat keine Auswirkung.
Inhalt |
[bearbeiten] Parameter
| pos | - | Iterator auf das zu entfernende Element |
| first, last | - | Das Iteratorenpaar, das den Bereich der zu entfernenden Elemente definiert |
[bearbeiten] Rückgabewert
Iterator nach dem letzten entfernten Element.
[first, last) ein leerer Bereich ist, wird last zurückgegeben.[bearbeiten] Ausnahmen
Wirft keine Ausnahme, es sei denn, der Zuweisungsoperator von T wirft eine Ausnahme.
[bearbeiten] Komplexität
Linear: Die Anzahl der Aufrufe des Destruktors von T ist gleich der Anzahl der gelöschten Elemente, der Zuweisungsoperator von T wird für die Anzahl der Elemente im Vektor nach den gelöschten Elementen aufgerufen.
[bearbeiten] Hinweise
Wenn Container-Elemente basierend auf einem Prädikat gelöscht werden müssen, anstatt den Container zu durchlaufen und den unären erase-Aufruf zu verwenden, wird im Allgemeinen die Iterator-Bereich-Überladung mit std::remove()/std::remove_if() verwendet, um die Anzahl der Verschiebungen der verbleibenden (nicht entfernten) Elemente zu minimieren — dies ist das Erase-Remove-Idiom. std::erase_if() ersetzt das Erase-Remove-Idiom.
[bearbeiten] 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); // Erase all even numbers 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]
[bearbeiten] Siehe auch
| entfernt alle Elemente, die bestimmte Kriterien erfüllen (function template) | |
| leert den Inhalt (public member function) |