ホームページ  >  記事  >  バックエンド開発  >  不明なサイズの std::array を C の関数に渡すにはどうすればよいですか?

不明なサイズの std::array を C の関数に渡すにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-24 19:04:301011ブラウズ

How to Pass an std::array of Unknown Size to a Function in C  ?

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

C では、std を受け入れる関数を作成するにはどうすればよいですか。 :array の型はわかっていますが、サイズは不明ですか?

次の例を考えてみましょう:

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

この関数を使用すると、さまざまなサイズの std::array を作成して、それらを渡すことができます。 mulArray:

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

mulArray(arr1, 3);
mulArray(arr2, 5);
mulArray(arr3, 2);</code>

プレーンな C スタイルの配列を使用するのと同様に、これを実現するもっと簡単な方法はありますか?

いいえ、これを実行することはできません関数テンプレートや std::vector などの代替コンテナを使用しない操作。

関数テンプレート ソリューション

任意のサイズの std::arrays を処理できる汎用関数を作成するには、関数テンプレートを使用する必要があります:

<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>

このテンプレートは、任意のサイズの整数の配列を受け取り、各要素に指定された乗数を乗算する関数を定義します。

実際の例この実装の詳細は、[ライブ例](https://godbolt.org/z/Y932XW)

でご覧いただけます。

以上が不明なサイズの std::array を C の関数に渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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