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는 메모리 이동만 하고 크기 축소는 컨테이너가 담당한다는 점을 기억하세요.