std::hive<T,Allocator>::erase
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.
pos.[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.
pos auf das letzte Element verweist, wird der end() Iterator zurückgegeben.last == end() vor dem Entfernen, wird der aktualisierte end() Iterator zurückgegeben.[first, last) ein leerer Bereich ist, wird last zurückgegeben.Komplexität
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) |