ranges::remove

ranges::remove (값·조건 제거 — ranges)

범위에서 특정 값 또는 조건을 만족하는 원소를 제거(빼내기)하는 ranges 버전 알고리즘이에요. <algorithm> 헤더에 있어요.

출처: cppreference

본문

std::ranges::remove는 범위에서 value와 같은 원소(또는 pred를 만족하는 원소)를 "제거"해요. 단, 실제로 컨테이너 크기를 줄이지는 않고, 살아남은 원소들을 앞으로 당겨 새 구간의 끝을 반환해요.

namespace std::ranges {
template< std::permutable I, std::sentinel_for<I> S,
          class T, class Proj = std::identity >
constexpr ranges::subrange<I> remove( I first, S last, const T& value, Proj proj = {} );
}
  • 반환 값: subrange<I>로, 살아남은 요소들의 새 구간.
  • remove_if는 술어 기반 버전.

실제로 제거하려면 그 뒤에 erase를 붙여야 해요(remove-erase 관용구).

std::vector<int> v{1, 2, 3, 2, 4};
auto r = std::ranges::remove(v, 2);
v.erase(r.begin(), r.end());   // v == {1,3,4}

<algorithm>의 remove는 메모리 이동만 하고 크기 축소는 컨테이너가 담당한다는 점을 기억하세요.

더 알아보기 (Learn more)

cppreference