ホームページ >バックエンド開発 >C++ >C でデフォルト以外の構成可能な `std::array` を繰り返しなしで初期化する方法

C でデフォルト以外の構成可能な `std::array` を繰り返しなしで初期化する方法

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-30 03:31:02703ブラウズ

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

反復なしでデフォルト以外の構成可能な std::array を初期化する

C で、デフォルト以外の構成可能な要素の std::array を初期化する挑戦になる可能性があります。 n (配列サイズ) が大きい場合、またはテンプレート パラメーターの場合、標準の初期化メソッドは面倒になります。

解決策:

洗練されたソリューションでは、反復子とテンプレートの組み合わせを利用します。その仕組みは次のとおりです。

2 つのヘルパー ユーティリティを定義します。

  • 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) を呼び出して配列を構築します。

例:

整数として 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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。