std::deque<T,Allocator>:: erase
| (1) | ||
|
iterator erase
(
iterator pos
)
;
|
(bis C++11) | |
|
iterator erase
(
const_iterator pos
)
;
|
(seit C++11)
(constexpr seit C++26) |
|
| (2) | ||
|
iterator erase
(
iterator first, iterator last
)
;
|
(bis C++11) | |
|
iterator erase
(
const_iterator first, const_iterator last
)
;
|
(seit C++11)
(constexpr seit C++26) |
|
Löscht die angegebenen Elemente aus dem Container.
[
first
,
last
)
.
Alle Iteratoren und Referenzen werden ungültig, es sei denn, die gelöschten Elemente befinden sich am Ende oder am Anfang des Containers. In diesem Fall werden nur die Iteratoren und Referenzen auf die gelöschten Elemente ungültig. Der
end()
Iterator wird ebenfalls ungültig, es sei denn, die gelöschten Elemente befinden sich am Anfang des Containers und das letzte Element wird nicht gelöscht.
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, falls first == last : Das Löschen eines leeren Bereichs ist eine No-Op.
Inhalt
Parameter
RückgabewertIterator, der dem letzten entfernten Element folgt.
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.
Exceptions
Wirft keine Ausnahme, es sei denn, eine Ausnahme wird vom Zuweisungsoperator von
Komplexität
Linear: Die Anzahl der Aufrufe des Destruktors von
AnmerkungenWenn Containerelemente basierend auf einem Prädikat gelöscht werden müssen, wird anstatt des Iterierens über den Container und des Aufrufs des unären Beispiel
Diesen Code ausführen
#include <deque> #include <iostream> void print_container(const std::deque<int>& c) { for (int i : c) std::cout << i << ' '; std::cout << '\n'; } int main() { std::deque<int> c{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; print_container(c); c.erase(c.begin()); print_container(c); c.erase(c.begin() + 2, c.begin() + 5); print_container(c); // Alle geraden Zahlen löschen for (std::deque<int>::iterator it = c.begin(); it != c.end();) { if (*it % 2 == 0) it = c.erase(it); else ++it; } print_container(c); } 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 FehlerberichteDie folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
Siehe auch
| ||||||||||||||||||||||||||||