std::list<T,Allocator>::remove, remove_if - cppreference.com (original) (raw)

| (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) | | template< class UnaryPred >size_type remove_if( UnaryPred p ); | | (since C++20) (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.

Contents

[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

#include #include   int main() { std::list 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 iteratorsand/or references will be invalidated only invalidates iterators andreferences to the removed elements

[edit] See also