Namespaces
Variants

std::list<T,Allocator>:: remove, remove_if

From cppreference.net

(1)
void remove ( const T & value ) ;
(bis C++20)
size_type remove ( const T & value ) ;
(seit C++20)
(constexpr seit C++26)
(2)
template < class UnaryPred >
void remove_if ( UnaryPred p ) ;
(bis C++20)
template < class UnaryPred >
size_type remove_if ( UnaryPred p ) ;
(seit C++20)
(constexpr seit C++26)

Entfernt alle Elemente, die bestimmte Kriterien erfüllen.

1) Entfernt alle Elemente, die gleich value sind (unter Verwendung von operator == ).
2) Entfernt alle Elemente, für die das Prädikat p den Wert true zurückgibt.

Macht nur die Iteratoren und Referenzen auf die entfernten Elemente ungültig.

Inhaltsverzeichnis

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 v vom Typ (möglicherweise const) T unabhängig von der Wertkategorie in bool konvertierbar sein und darf v nicht modifizieren. Daher ist ein Parametertyp T & nicht zulässig , ebenso wenig wie T , es sei denn, für T ist eine Verschiebung äquivalent zu einer Kopie (seit C++11) . ​

Typanforderungen
-
UnaryPred muss die Anforderungen von Predicate erfüllen.

Rückgabewert

(keine)

(until C++20)

Die Anzahl der entfernten Elemente.

(since C++20)

Komplexität

Gegeben N als std:: distance ( begin ( ) , end ( ) ) :

1) Genau N Vergleiche mit operator == .
2) Genau N Anwendungen des Prädikats p .

Hinweise

Feature-Test Makro Wert Std Funktion
__cpp_lib_list_remove_return_type 201806L (C++20) Ändern des Rückgabetyps

Beispiel

#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

Fehlerberichte

Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR Angewendet auf Verhalten wie veröffentlicht Korrektes Verhalten
LWG 1207 C++98 es war unklar, ob Iteratoren
und/oder Referenzen ungültig werden
macht nur Iteratoren und
Referenzen auf die entfernten Elemente ungültig

Siehe auch

Entfernt Elemente, die bestimmte Kriterien erfüllen
(Funktions-Template)