ループ内の非常に大きな配列の要素を設定する必要があります。場合によってはループが発生する可能性continue
があるため、配列の位置は個別にカウントする必要があります。
常に 10 個の連続する要素を設定する必要があります。(10 は例です。シナリオによっては、30 以上が必要になる場合があります。)
k+c
(c=0,1,2,... 定数) またはk++
より良いアプローチですか? 以下の 2 つのソリューションのうち、どちらがより効率的ですか? また、その理由は何ですか?
int k = 0;
for (int i = 0; i < aVeryHighNumber; i++) {
if (continueRequired()) {
continue;
}
k = ... // get k as a result of a certain calculation
veryLargeArray[k++] = value0; // these values might be calculated on-the-fly
veryLargeArray[k++] = value1;
veryLargeArray[k++] = value2;
veryLargeArray[k++] = value5;
veryLargeArray[k++] = value4;
veryLargeArray[k++] = value5;
veryLargeArray[k++] = value6;
veryLargeArray[k++] = value4;
veryLargeArray[k++] = value7;
veryLargeArray[k++] = value1;
}
2番目の解決策:
for (int i = 0; i < aVeryHighNumber; i++) {
if (continueRequired()) {
continue;
}
k = ... // get k as a result of a certain calculation
veryLargeArray[k] = value0;
veryLargeArray[k + 1] = value1;
veryLargeArray[k + 2] = value2;
veryLargeArray[k + 3] = value5;
veryLargeArray[k + 4] = value4;
veryLargeArray[k + 5] = value5;
veryLargeArray[k + 6] = value6;
veryLargeArray[k + 7] = value4;
veryLargeArray[k + 8] = value7;
veryLargeArray[k + 9] = value1;
}
理論的には、2 番目のソリューションは 9 回の加算操作 (基本的に展開されたループ) を実行しますが、最初のソリューションは 9 回のインクリメントを実行します。つまり、値も格納する必要がありk
ます。ただし、1 ずつ自己インクリメントすることは、最近ではおそらく非常に効率的な操作であるため、2 番目のソリューションが高速かどうかはわかりません。