而循环比循环更有效.可能是什么原因
While loop is more efficient than for loop. What could be the reason?
我正在做一个leetcode挑战(在此(娱乐,并感到惊讶的是,循环比for循环更有效。我本来希望编译器能生成相同的代码(也按照以下问题和答案(,但是运行时间不同。
while循环约为3毫秒,而for循环占6毫秒左右。我重复了几次,似乎经常是这样。
我不幸没有测试用例,而且我没有关于所用编译器,架构或优化设置的任何信息。我认为这并不重要,因为这些程序几乎相同,并且肯定使用相同的编译器,架构和选项。
在此方面有任何想法或经验?
循环:
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++;
}
}
}
循环:
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++;
}
}
}
您运行不够或足够长的测试,很难验证基准测试。
更好的方法是比较生成的组件:for-loop和while-loop。使用G 6.3对摘要进行最大优化(-O3
(。由此很明显,根本没有性能差异,因为两者的组件完全相同。
所有循环遵循相同的模板:
{
// Initialize
LOOP:
if(!(/* Condition */) ) {
goto END
}
// Loop body
// Loop increment/decrement
goto LOOP
}
END:
您的测试必须与CPU上的可用处理能力有所不同。
相关文章:
- 是什么阻止DOMTimerCoordinator::NextID进入无休止的循环
- 在C++中,建议通过数组循环的方式是什么?
- 编写按初始值循环的循环的更好方法是什么
- 是什么导致我的循环在第一次迭代中运行得更慢
- 从列表/向量制作嵌套 for 循环的最佳方法是什么?
- <<、>>算子在循环中的作用是什么
- 这个 FOR-IF 循环的解释是什么?
- 这个循环是什么意思:for(j,0,np)
- 这个循环测试条件是什么意思?
- 这是循环做什么C++?tempList[j+1]
- 而循环比循环更有效.可能是什么原因
- 在 C++ 中直接为 FOR 循环提供的 " ; " 的功能是什么?
- 前循环后的if stategent是什么意思
- 关于循环变量优化的标准合规行为是什么?
- 为循环中多次调用的函数返回值预分配内存的正确方法是什么
- for 循环后的分号是什么意思?为什么第一个循环语句中有 j++
- Java循环屏障C++版本是什么?
- 将在 C++ 中输出多维数组内容的 for 循环的结构是什么
- C++ 结束此 8 位 for 循环的最佳方法是什么
- 此摊销公式的适当循环是什么