为了好玩,我正在做一个LeetCode挑战(here),并感到惊讶的是while循环比for循环更有效率。我本来希望编译器生成相同的代码(也按照这些question and answers),但运行时间不同。While循环比循环更有效。可能是什么原因?
while循环大约3 ms,for循环大约需要6 ms。我重复了几次,似乎常常是这样。
不幸的是,我没有测试用例,而且我也没有关于使用的编译器,架构或优化集的任何信息。我认为这并不重要,因为这些程序几乎完全相同,并确实使用相同的编译器,体系结构和选项。
在这个问题上的任何想法或经验?
For循环:
vector<int> twoSum(vector<int>& numbers, int target) {
int upper = numbers.size() - 1;
int lower = 0;
int sum;
for (;lower<upper;) {
sum = numbers[lower] + numbers[upper];
if (sum == target) {
return vector<int> { lower+1, upper+1 };
} else if (sum > target) {
upper--;
} else {
lower++;
}
}
}
While循环:
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