各要素が前の要素に依存する配列のセットを構築しています。初期値を設定するための洗練された解決策がありません。コードは次のようになります。各要素が前の要素に依存する配列を構築する
int A[1024];
int B[1024];
/* ... more arrays... */
int i;
for (i = 0; i < 1024; i++) {
/* do some work */
A[i] = A[i-1] + some_value();
B[i] = B[i-1] + some_other_value();
/* ... and so on... */
}
しかし、もちろん、これは不正なメモリアクセスが、私はすべての配列の初期値がなければならないことを知っているi
が0の場合は0である。
にはいくつかの方法があります。この問題を解決します。私は巨大なif
文をループに入れて、i
が0かどうかを調べることができました。それはtrue
に一度しか評価されないので、厄介なようです。最後の反復の値を保持するprev_val_of_A
などと呼ばれる配列ごとに、一時変数を0に初期化しておくことができました。私はすべての反復の終わりに現在の値に更新する必要があります。ほとんどの場合、私が望む値は配列の前の要素のすぐそばに座っているので、これはちょっとばかげているようです。私は配列の意味を知ることができ、配列のの2番目の要素には、ループの最初のの反復のの値が含まれています。つまり、ループ内で、A[0]
を初期化し、A[1025]
のために割り当てる。これは混乱を招くようだとA
のさらなる使用上のエラーを誘うかもしれない
A[i+1] = A[i] + some_value();
ください。
私は、この問題を解決するためにクリーンでエレガントな提案を探しています。
私はそれを動作させることができればこれが最もよいと私は同意します。それは確かに最も自然なことです(そして私は質問でそれを言及すべきでした)。問題は、 '/ * do some work * /'は 'i = 0'でも発生する必要があるということです。おそらく、私はループを再考する必要があります。 –