Namensräume
Varianten
Aktionen

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

Von cppreference.com
 
 
 
 
(1)
void remove( const T& value );
(seit C++11)
(bis C++20)
size_type remove( const T& value );
(seit C++20)
(2)
template< class UnaryPredicate >
void remove_if( UnaryPredicate p );
(seit C++11)
(bis C++20)
template< class UnaryPredicate >
size_type remove_if( UnaryPredicate p );
(seit C++20)

Entfernt alle Elemente, die spezifische Kriterien erfüllen. 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 das Prädikat 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 modifizieren. Daher ist ein Parametertyp von T& nicht erlaubt, ebenso wenig wie T, es sei denn, für T ist ein Verschieben äquivalent zu einer Kopie(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 mit operator==.
2) Genau N Aufrufe des Prädikats 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 <forward_list>
#include <iostream>
 
int main()
{
    std::forward_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

[bearbeiten] Siehe auch

entfernt Elemente, die bestimmte Kriterien erfüllen
(Funktionstemplate) [edit]