>백엔드 개발 >C++ >C에서 반복 없이 기본이 아닌 생성 가능 `std::array`를 초기화하는 방법은 무엇입니까?

C에서 반복 없이 기본이 아닌 생성 가능 `std::array`를 초기화하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-10-30 03:31:02699검색

How to Initialize a Non-Default Constructible `std::array` Without Repetition in C  ?

반복 없이 기본이 아닌 생성 가능 std::array 초기화

C에서 기본이 아닌 생성 가능 요소의 std::array 초기화 도전이 될 수 있습니다. 배열 크기 n이 크거나 템플릿 매개변수인 경우 표준 초기화 방법이 번거로워집니다.

해결책:

우아한 솔루션은 반복자와 템플릿의 조합을 활용합니다. 작동 방식은 다음과 같습니다.

두 개의 도우미 유틸리티를 정의합니다.

  • genseq_t는 정수 시퀀스 [0, 1, ..., n-1을 생성합니다. ].
  • repeat는 주어진 값을 지정된 횟수만큼 반복하여 배열을 생성합니다.

이러한 유틸리티를 사용하면 std::array를 초기화할 수 있습니다. 템플릿 함수 f에서 다음과 같이:

<code class="cpp">template<typename T, int N>
void f(T value)
{
    std::array<T, N> items = repeat(value, genseq_t<N>{});
}</code>

구현 세부 정보:

  • genseq_t: 가변 템플릿을 사용하여 최대 n까지의 정수 시퀀스.
  • repeat: 이 함수는 genseq_t에서 생성된 시퀀스의 압축을 풀고 시퀀스의 각 정수에 대해 T(N, value)를 호출하여 배열을 구성합니다.

예:

값을 정수로, n을 템플릿 매개변수로 사용하여 초기화를 고려해보세요.

<code class="cpp">void f(int value)
{
    std::array<T, 5> items = repeat(value, genseq_t<5>{});
}</code>

여기서 항목은 다음과 같습니다. 5번 반복되는 값({value, value, value, value, value})으로 초기화됩니다.

장점:

이 접근 방식은 특히 n이 다음과 같은 경우 더 간결합니다. 크기가 큰. 또한 값을 수동으로 반복할 필요가 없습니다.

위 내용은 C에서 반복 없이 기본이 아닌 생성 가능 `std::array`를 초기화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.