私は楽しいためにLeetCodeチャレンジ(here)を行っていましたが、whileループがforループよりも効率的だったことに驚いていました。コンパイラが同じコードを生成することを期待していたでしょう(question and answersも同じですが)実行時間が異なります。Whileループはforループより効率的です。理由は何でしょうか?
forループは約3msでしたが、forループは約6msでした。私は数回繰り返しました。それはしばしばそのように思えます。
残念ながら、私はテストケースを持っていないし、使用されているコンパイラ、アーキテクチャまたは最適化の設定に関する情報はありません。私は、プログラムがほぼ同じで、同じコンパイラ、アーキテクチャ、オプションを確実に使用するので、重要ではないと思います。
その点に関するアイディアや経験はありますか? Forループ
:
vector<int> twoSum(vector<int>& numbers, int target) {
int upper = numbers.size() - 1;
int lower = 0;
int sum;
while (lower<upper) {
sum = numbers[lower] + numbers[upper];
if (sum == target) {
return vector<int> { lower+1, upper+1 };
} else if (sum > target) {
upper--;
} else {
lower++;
}
}
}
[mcve]を作成します。 – user2079303
奇妙な;コード生成が本当に悪く、最適化がオフになっていない限り、それを行う理由を考えることができません –
ループを何回実行しましたか?最適化されましたか?マイクロベンチマーキングは非常に難しいことがあります。 – NathanOliver