std::list<T,Allocator>::remove, remove_if
Von cppreference.com
| (1) | ||
void remove( const T& value ); |
(bis C++20) | |
| size_type remove( const T& value ); |
(seit C++20) | |
| (2) | ||
template< class UnaryPredicate > void remove_if( UnaryPredicate p ); |
(bis C++20) | |
| template< class UnaryPredicate > size_type remove_if( UnaryPredicate p ); |
(seit C++20) | |
Entfernt alle Elemente, die spezifischen Kriterien entsprechen. Macht nur die Iteratoren und Referenzen auf die entfernten Elemente ungültig.
1) Entfernt alle Elemente, die gleich value sind (mittels operator==).
2) Entfernt alle Elemente, für die die Bedingung p true zurückgibt.
Inhalt |
[bearbeiten] Parameter
| value | - | Wert der zu entfernenden Elemente |
| p | - | unäres Prädikat, das true zurückgibt, wenn das Element entfernt werden soll. Der Ausdruck p(v) muss für jedes Argument |
| Typanforderungen | ||
-UnaryPredicate muss die Anforderungen eines Prädikats erfüllen. | ||
[bearbeiten] Rückgabewert
|
(keine) |
(bis C++20) |
|
Die Anzahl der entfernten Elemente. |
(seit C++20) |
[bearbeiten] Komplexität
Gegeben sei N als std::distance(begin(), end())
1) Genau N Vergleiche mittels operator==.
2) Genau N Anwendungen der Bedingung p.
[bearbeiten] Hinweise
| Feature-Test-Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_list_remove_return_type |
201806L |
(C++20) | Änderung des Rückgabetyps |
[bearbeiten] Beispiel
Führen Sie diesen Code aus
#include <list> #include <iostream> int main() { std::list<int> l = {1, 100, 2, 3, 10, 1, 11, -1, 12}; auto count1 = l.remove(1); std::cout << count1 << " elements equal to 1 were removed\n"; auto count2 = l.remove_if([](int n){ return n > 10; }); std::cout << count2 << " elements greater than 10 were removed\n"; std::cout << "Finally, the list contains: "; for (int n : l) std::cout << n << ' '; std::cout << '\n'; }
Ausgabe
2 elements equal to 1 were removed 3 elements greater than 10 were removed Finally, the list contains: 2 3 10 -1
Defect reports
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 1207 | C++98 | war unklar, ob Iteratoren und/oder Referenzen ungültig werden |
macht nur Iteratoren und Referenzen auf die entfernten Elemente ungültig |
[bearbeiten] Siehe auch
| entfernt Elemente, die bestimmte Kriterien erfüllen (Funktionstemplate) |