deque::erase / erase_if

deque::erase / erase_if (값·조건으로 요소 제거)

std::deque에서 특정 값과 같거나 조건을 만족하는 요소를 모두 제거하고, 제거된 개수를 반환하는 자유 함수들이에요. <deque> 헤더, C++20부터.

출처: cppreference

본문

이 자유 함수들은 std::erase(container, value)std::erase_if(container, pred) 형태로 제공돼요.

template< class T, class Alloc, class U >
std::deque<T, Alloc>::size_type
    erase( std::deque<T, Alloc>& c, const U& value );   // (1)

template< class T, class Alloc, class Pred >
std::deque<T, Alloc>::size_type
    erase_if( std::deque<T, Alloc>& c, Pred pred );     // (2)
    1. value와 같은 요소를 모두 제거해요. 반환 값은 제거된 요소의 개수예요.
    1. 술어 pred를 만족하는 요소를 모두 제거해요. 반환 값은 제거된 요소의 개수예요.

erase_if는 관례적으로

auto it = std::remove_if(c.begin(), c.end(), pred);
auto removed = c.end() - it;
c.erase(it, c.end());

와 같은 효과로 동작해요(그리고 제거 개수를 반환).

std::deque<int> d{1, 2, 3, 2, 4};
auto n = std::erase(d, 2);                  // 2 제거, n == 2
auto m = std::erase_if(d, [](int x){ return x % 2 == 0; });  // 짝수 제거

멤버 erase(pos)가 위치 기반이라면, 이 자유 함수들은 값/조건 기반으로 한 번에 지우면서 개수까지 알려줘요.

더 알아보기 (Learn more)

cppreference