ranges_uninitialized_move
ranges_uninitialized_move (ranges::uninitialized_move)
<memory> 헤더에 정의되어 있어요. 소스 범위의 요소들을 초기화되지 않은 대상 저장 공간으로 이동해 구성해요. std::uninitialized_move의 ranges 버전(니블로이드, niebloid)이에요. C++20부터 도입됐어요.
출처: cppreference
본문
호출 시그니처:
template< std::input_iterator I, std::sentinel_for<I> S1,
/*nothrow-forward-iterator*/ O, /*nothrow-sentinel-for*/<O> S2 >
requires std::constructible_from<std::iter_value_t<O>,
std::iter_rvalue_reference_t<I>>
uninitialized_move_result<I, O>
uninitialized_move( I ifirst, S1 ilast, O ofirst, S2 olast ); // (1) since C++20, constexpr since C++26
template< ranges::input_range IR, /*nothrow-forward-range*/ OR >
requires std::constructible_from<ranges::range_value_t<OR>,
ranges::range_rvalue_reference_t<IR>>
uninitialized_move_result<ranges::borrowed_iterator_t<IR>,
ranges::borrowed_iterator_t<OR>>
uninitialized_move( IR&& in_r, OR&& out_r ); // (2) since C++20, constexpr since C++26
소스 범위 [ifirst, ilast)의 요소를 대상 범위 [ofirst, olast)에 이동해 구성해요. 각 대상 요소는 소스 요소를 std::move하는 형태로 std::construct_at으로 구성돼요.
- (1) 반복자·센티널 쌍.
- (2) 범위 쌍.
반환값
{in_last, out_last} 형태의 uninitialized_move_result를 돌려줘요.
T* dest = /* 초기화되지 않은 저장 공간 */;
std::ranges::uninitialized_move(src.begin(), src.end(), dest, dest + src.size());
예외가 발생하면 이미 구성된 대상 요소들이 파괴되고, 이동된 소스 요소는 유효하지만 미지정 상태로 남을 수 있어요.