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