ホームページ  >  記事  >  バックエンド開発  >  C 関数でさまざまなサイズの std::Array を処理するには?

C 関数でさまざまなサイズの std::Array を処理するには?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-24 14:46:01800ブラウズ

How to Handle std::Arrays of Varying Sizes in C   Functions?

サイズ不明の std::array を関数に渡す

質問:

型はわかっているがサイズが異なる std::array を処理する関数をどのように作成すればよいでしょうか?たとえば、次の例を考えてみましょう:

<code class="cpp">// Hypothetical function
void mulArray(std::array<int, ?>& arr, const int multiplier) {
    for (auto& e : arr) {
        e *= multiplier;
    }
}</code>

次のようなさまざまなサイズの配列に対応するために、mulArray などの関数を定義するにはどうすればよいですか:

<code class="cpp">std::array<int, 17> arr1;
std::array<int, 6>  arr2;
std::array<int, 95> arr3;</code>

答え:

残念ながら、関数テンプレートを使用するか、std::vector などの別のコンテナー タイプを使用しない限り、未知のサイズの std::array を受け入れる関数を作成することはできません。

関数テンプレート:

<code class="cpp">template<std::size_t SIZE>
void mulArray(std::array<int, SIZE>& arr, const int multiplier) {
    for (auto& e : arr) {
        e *= multiplier;
    }
}</code>

この例では、mulArray 関数が関数テンプレートとして定義されており、任意のサイズの配列を処理できるようになります。 SIZE パラメータは、コンパイル時の配列のサイズを指定します。

使用例:

<code class="cpp">// Array of size 17
std::array<int, 17> arr1;

// Function call with template instantiation for size 17
mulArray(arr1, 3);</code>

注: 関数テンプレートを使用する場合、関数定義は、コンパイル中にアクセスできるようにヘッダー ファイルに配置する必要があります。

以上がC 関数でさまざまなサイズの std::Array を処理するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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