使用for循环更有效?

问题描述

在很多处理数组的for循环中,我将i < arr.length()作为第二条语句
请问:
for(i = 0; i < arr.length(); i++){
//do something
}
比这效率低:
size = arr.length();
for(i = 0; i < size; i++){
//do something
}
还是两者之间的差异如此之小以至于我不在乎?
此问题仅适用于需要使用函数才能查找数组/列表的长度的语言,例如,与java不同,它是面向对象的,数组的长度为arr.length

解决方法

关于语言,编译器,其配置和循环条件,第一个版本的速度可能会较慢。

实际上,例如在C,C ++和Java中,该函数在每次迭代时都被调用,因此,当禁用优化时,生成的程序可以变慢。其他语言(例如Python)具有不同类型的循环,这些循环遍历给定的可迭代对象/范围(例如,列表,生成器),并且对值进行一次评估。 在您的情况下,如果启用了优化,则不会出现性能差异,因为函数调用arr.length()通常是一个常量(在循环执行的上下文中),并且大多数编译器足以检测到这一点并能够产生快速的等效代码(您可以在C ++ here中看到一个简单的示例)。但是,请注意,解释器通常执行此类优化。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...