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());

예외가 발생하면 이미 구성된 대상 요소들이 파괴되고, 이동된 소스 요소는 유효하지만 미지정 상태로 남을 수 있어요.

더 알아보기 (Learn more)

cppreference