std::list<T,Allocator>::remove, remove_if
From cppreference.com
 
 
 
 
 
 C++ 
 Feature test macros (C++20)
 Concepts library (C++20)
 Metaprogramming library (C++11)
 Ranges library (C++20)
 Filesystem library (C++17)
 Concurrency support library (C++11)
 Execution control library (C++26)
Containers library 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
(C++17)
(C++11)
(C++26)
(C++26)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++23)
(C++23)
(C++23)
(C++23)
(C++20)
(C++23)
 Tables
std::list 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Non-member functions  
 
 Deduction guides (C++17) 
(C++23)
  (C++11)
(C++11)
(C++11)
(C++11)
(C++23)
(C++11)
(C++11)
(C++23)
(C++11)
(C++23)
list::removelist::remove_if
(until C++20)(until C++20)(until C++20)(until C++20)(until C++20)
 
 (1)
 
void remove( const T& value );
 
 (until C++20) 
size_type remove( const T& value );
 
 (since C++20) (constexpr since C++26)
 
 (2)
 
template< class UnaryPred >
void remove_if( UnaryPred p );
 
 (until C++20) 
void remove_if( UnaryPred p );
template< class UnaryPred >
size_type remove_if( UnaryPred p );
 
 (since C++20) size_type remove_if( UnaryPred p );
(constexpr since C++26)
Removes all elements satisfying specific criteria.
1) Removes all elements that are equal to value (using operator==).
2) Removes all elements for which predicate p returns true.
Invalidates only the iterators and references to the removed elements.
[edit] 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).
 Type requirements
 -
UnaryPred must meet the requirements of Predicate.
[edit] Return value
(none)
(until C++20)The number of elements removed.
(since C++20)[edit] Complexity
Given \(\scriptsize N\)N as std::distance (begin(), end()):
1) Exactly \(\scriptsize N\)N comparisons using operator==.
2) Exactly \(\scriptsize N\)N applications of the predicate p.
[edit] Notes
| Feature-test macro | Value | Std | Feature | 
|---|---|---|---|
| __cpp_lib_list_remove_return_type | 201806L | (C++20) | Change the return type | 
[edit] Example
Run this code
#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
Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
| DR | Applied to | Behavior as published | Correct behavior | 
|---|---|---|---|
| LWG 1207 | C++98 | it was unclear whether iterators and/or references will be invalidated | only invalidates iterators and references to the removed elements |