1

私は std::array が初めてです。この関数を作成する必要があります

void foo(std::array < std::array <double, a>& , b> & previous)

ここで、a と b は 2 つの固定整数値です。どうすればいいですか?

前もって感謝します!

4

4 に答える 4

0

テンプレート引数 ( への引数などstd::array) は、コンパイル時に認識されている必要があります。一般的には、2 つのサイズでテンプレート化された関数を作成できます。たとえば、次のようになります。

template <std::size_t N, std::size_t M>
void foo(std::array<std::array<double, N>, M> &previous) {
    // code goes here, e.g.:
    previous[M - 1][N - 1] = static_cast<double>(M * N);
}

テンプレート引数は関数の引数の型によって推定されるため、配列の配列は任意の次元を持つことができ、 を呼び出すときにそれらを指定する必要はありませんfoo

std::array<std::array<double, 10>, 20> my_array;
foo(my_array); // equivalent to foo<10, 20>(my_array);

ところで、std::vector<std::vector<T>>プログラムを堅牢または高速にしたい場合、使用はひどい、ひどい考えです。各 inner の長さを手動で管理して注意深く追跡する必要があるだけでなく、単一の長さの配列ではなく、長さの配列vectorを個別にヒープ割り当てすることで、パフォーマンスが大幅に低下します。N MN x M

于 2016-09-25T23:52:11.980 に答える