table of contents
std::list::remove,remove_if(3) | C++ Standard Libary | std::list::remove,remove_if(3) |
NAME¶
std::list::remove,remove_if - std::list::remove,remove_if
Synopsis¶
void remove( const T& value ); (until C++20)
size_type remove( const T& value ); (since C++20)
template< class UnaryPredicate > (1) (until C++20)
void remove_if( UnaryPredicate p ); (2)
template< class UnaryPredicate > (since C++20)
size_type remove_if( UnaryPredicate p );
Removes all elements satisfying specific criteria. Invalidates only the
iterators
and references to the removed elements.
1) Removes all elements that are equal to value (using operator==).
2) Removes all elements for which predicate p returns true.
Parameters¶
value - value of the elements to remove
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
p - (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¶
-
UnaryPredicate must meet the requirements of Predicate.
Return value¶
(none) (until C++20)
The number of elements removed. (since C++20)
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.
Notes¶
Feature-test macro Value Std Feature
__cpp_lib_list_remove_return_type 201806L (C++20) Change the return type
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
it was unclear whether iterators only invalidates iterators and
LWG 1207 C++98 and/or references will be references to the removed
invalidated elements
See also¶
remove removes elements satisfying specific criteria
remove_if (function template)
2024.06.10 | http://cppreference.com |