list_erase2
list_erase2 (std::erase, std::erase_if — 조건부 일괄 제거)
std::list를 위한 비멤버 함수 std::erase와 std::erase_if예요. 특정 값과 같거나, 술어를 만족하는 모든 원소를 컨테이너에서 제거해요.
출처: cppreference
본문
시그니처는 다음과 같아요.
template< class T, class Alloc, class U >
std::list<T, Alloc>::size_type
erase( std::list<T, Alloc>& c, const U& value ); // (1) (since C++20)
template< class T, class Alloc, class Pred >
std::list<T, Alloc>::size_type
erase_if( std::list<T, Alloc>& c, Pred pred ); // (2) (since C++20)
(1) value와 같게 비교되는 모든 원소를 제거해요. std::erase는 C++26에서 U = T 기본값 형태로 바뀌었어요.
(2) 술어 pred가 true를 반환하는 모든 원소를 제거해요.
반환값
제거된 원소의 개수.
복잡도
선형(linear)이에요.
예제
#include <list>
#include <iostream>
int main()
{
std::list<int> l{1, 2, 3, 2, 4};
std::erase(l, 2); // {1, 3, 4}
std::erase_if(l, [](int x){ return x % 2 == 0; }); // {1, 3}
for (int x : l) std::cout << x << ' ';
}