ranges_uninitialized_default_construct_n
ranges_uninitialized_default_construct_n (ranges::uninitialized_default_construct_n)
<memory> 헤더에 정의되어 있어요. first부터 시작해 count개의 객체를 초기화되지 않은 저장 공간에 기본 생성(default construct)해요. std::uninitialized_default_construct_n의 ranges 버전(니블로이드, niebloid)이에요. C++20부터 도입됐어요.
출처: cppreference
본문
호출 시그니처:
template< /*nothrow-forward-iterator*/ I >
requires std::default_initializable<std::iter_value_t<I>>
I uninitialized_default_construct_n( I first,
std::iter_difference_t<I> count ); // (1) since C++20, constexpr since C++26
template< /*execution-policy*/ Ep, /*nothrow-random-access-iterator*/ I >
requires std::default_initializable<std::iter_value_t<I>>
I uninitialized_default_construct_n( Ep&& policy, I first,
std::iter_difference_t<I> count ); // (2) since C++26
[first, first + count) 범위에 std::construct_at(std::addressof(*it))로 객체를 기본 생성해요. 예외가 발생하면 이미 구성된 요소들이 역순으로 파괴돼요.
- (1) 직렬 버전.
- (2) 실행 정책
policy에 따른 병렬 버전. (C++26)
반환값
마지막으로 구성한 요소 다음의 반복자.
T* buf = ...; // 초기화되지 않은 저장 공간
std::ranges::uninitialized_default_construct_n(buf, 10); // 10개 기본 생성