1. ホーム
  2. c++

[解決済み] サイズ不明のstd::arrayを関数に渡す

2022-08-03 22:18:29

質問

C++11 では、型はわかっているがサイズが不明な std::array を受け取る関数 (またはメソッド) をどのように書けばよいのでしょうか。

// made up example
void mulArray(std::array<int, ?>& arr, const int multiplier) {
    for(auto& e : arr) {
        e *= multiplier;
    }
}

// lets imagine these being full of numbers
std::array<int, 17> arr1;
std::array<int, 6>  arr2;
std::array<int, 95> arr3;

mulArray(arr1, 3);
mulArray(arr2, 5);
mulArray(arr3, 2);

検索したところ、テンプレートを使うという提案しか見つかりませんでしたが、それらは乱雑で(ヘッダにメソッド定義)、私が達成しようとしていることに対して過剰なようです。

これを動作させるための簡単な方法は、明白な C スタイルの配列と同じようにありますか?

どのように解決するのですか?

C言語の配列と同じように、これを動作させる簡単な方法はありますか?

いいえ。あなたが関数を関数 テンプレート (のような別のコンテナを使うか)。 std::vector のような別のコンテナを使用することもできます。)

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

ここでは 生きた例です。 .