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

From cppreference.com
< cpp‎ | container‎ | list

 
 
Containers library
Sequence
(C++11)
Associative
Unordered associative
Adaptors
Views
(C++20)
 
 
(1)
void remove( const T& value );
(until C++20)
size_type remove( const T& value );
(since C++20)
(2)
template< class UnaryPredicate >
void remove_if( UnaryPredicate p );
(until C++20)
template< class UnaryPredicate >
size_type remove_if( UnaryPredicate p );
(since C++20)

Removes all elements satisfying specific criteria.

1) Removes all elements that are equal to value.
2) Removes all elements for which predicate p returns true.

Parameters

value - value of the elements to remove
p - unary predicate which returns ​true if the element should be removed.

The expression p(v) must be convertible to bool for every argument v of type (possibly const) T, regardless of value category, and must not modify v. Thus, a parameter type of T&is not allowed, nor is T unless for T a move is equivalent to a copy (since C++11). ​

Return value

(none)

(until C++20)

The number of elements removed.

(since C++20)

Complexity

Linear in the size of the container

Notes

Feature-test macro: __cpp_lib_list_remove_return_type

Example

#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';
}

Output:

2 elements equal to 1 were removed
3 elements greater than 10 were removed
Finally, the list contains: 2 3 10 -1

See also

removes elements satisfying specific criteria
(function template)