各要素が前の要素に依存する配列のセットを構築していますが、初期値を設定するための洗練されたソリューションを思い付くのに苦労しています。コードは次のようになります。
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... */
}
ただし、もちろん、が0の場合、これは無効なメモリアクセスi
です。すべての配列の初期値は0である必要があることを私は知っています。
この問題を解決する方法はいくつかあります。巨大なif
ステートメントをループに入れて、が0であるかどうかを確認できます。1回しi
か評価されないため、不格好なようです。最後の反復の値を保持する、などtrue
と呼ばれる配列ごとに、0に初期化された一時変数を保持できます。prev_val_of_A
すべての反復の終わりに、現在の値に更新する必要があります。ほとんどの場合、必要な値は配列の前の要素のすぐそこにあるため、これは少しばかげているように見えます。配列の意味をいじって、配列の2番目の要素にループの最初の反復の値が含まれるという規則を採用することができます。つまり、割り当てA[1025]
、初期化A[0]
してから、ループ内で実行します。
A[i+1] = A[i] + some_value();
これは紛らわしいようで、をさらに使用するとエラーが発生する可能性がありA
ます。
この問題を解決するためのクリーンでエレガントな提案を探しています。