ranges::shift_left / shift_right
ranges::shift_left / shift_right (요소 이동 — ranges)
범위의 요소를 왼쪽 또는 오른쪽으로 일정 칸 이동시키는 ranges 버전 알고리즘이에요. <algorithm> 헤더, C++23부터.
출처: cppreference
본문
std::ranges::shift_left는 범위의 요소를 왼쪽으로 n칸 이동시켜요. shift_right는 오른쪽으로 n칸 이동시켜요.
namespace std::ranges {
template< std::permutable I, std::sentinel_for<I> S >
constexpr ranges::subrange<I> shift_left( I first, S last, std::iter_difference_t<I> n );
template< std::permutable I, std::sentinel_for<I> S >
constexpr ranges::subrange<I> shift_right( I first, S last, std::iter_difference_t<I> n );
}
- 반환 값: 이동 후 새로 채워진 구간을 나타내는
subrange. - 이동하며 비는 자리에는 기본 생성 요소가 남아요(요소는 이동되지만 소멸되지 않아요).
std::vector<int> v{1, 2, 3, 4, 5};
std::ranges::shift_left(v, 2);
// v == {3,4,5,?,?} (앞 2개는 이동, 뒤는 값 불확정)
std::remove/rotate류보다 "단순히 n칸 밀기"가 필요할 때 쓰는 함수예요. 이동 후 남는 요소의 처리를 직접 다뤄야 해요.