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.
pos.[first, last).Iteratoren (einschließlich des end()-Iterators) und Referenzen auf die Elemente an oder nach der Stelle des Löschens werden ungültig.
Der Iterator pos muss gültig und dereferenzierbar sein. Daher kann der Iterator end() (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 |
| Typanforderungen | ||
-
T
nicht
MoveAssignable
ist, ist das Verhalten undefiniert.
|
||
Rückgabewert
Iterator, der dem letzten entfernten Element folgt.
[
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.
Anmerkungen
Wenn Containerelemente basierend auf einem Prädikat gelöscht werden müssen, wird anstatt über den Container zu iterieren und eine unäre erase aufzurufen, normalerweise die Überladung für Iteratorbereiche zusammen 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.
Beispiel
#include <inplace_vector>
#include <print>
int main()
{
std::inplace_vector<int, 26> 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
(Funktions-Template) |
|
|
löscht den Inhalt
(öffentliche Elementfunktion) |