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

Linda Hamilton
リリース: 2024-10-30 03:31:02
オリジナル
621 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!