Namensräume
Varianten
Aktionen

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

Von cppreference.com
< cpp‎ | container‎ | list
 
 
 
 
(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 v vom Typ (möglicherweise const) T, unabhängig von der Wertkategorie, in bool konvertierbar sein und darf v nicht verändern. Daher ist ein Parametertyp von T& nicht zulässig, ebenso wenig wie T es sei denn, für T ist ein Move äquivalent zu einem Copy(seit C++11). ​

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

#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) [edit]