list_remove
list_remove (std::list::remove, remove_if — 조건부 원소 제거)
std::list에서 특정 기준을 만족하는 모든 원소를 제거하는 멤버 함수들이에요. 값과 같거나, 술어가 참인 원소를 제거해요.
출처: cppreference
본문
시그니처는 다음과 같아요.
void remove( const T& value ); // (1) (until C++20)
size_type remove( const T& value ); // (since C++20)
template< class UnaryPredicate >
void remove_if( UnaryPredicate p ); // (2) (until C++20)
template< class UnaryPredicate >
size_type remove_if( UnaryPredicate p ); // (since C++20)
특정 기준을 만족하는 모든 원소를 제거해요. 제거된 원소에 대한 이터레이터와 참조만 무효화돼요.
(1) operator==를 써서 value와 같은 모든 원소를 제거해요.
(2) 술어 p가 true를 반환하는 모든 원소를 제거해요.
C++20부터는 제거된 원소의 개수를 반환해요.
복잡도
std::distance(begin(), end())에 정확히 그만큼의 비교 호출이 일어나는 선형(linear) 연산이에요.
예제
#include <list>
#include <iostream>
int main()
{
std::list<int> l{1, 2, 3, 2, 4};
l.remove(2); // {1, 3, 4}
l.remove_if([](int x){ return x % 2 == 1; }); // {4}
for (int x : l) std::cout << x << ' ';
}