社区
数据结构与算法
帖子详情
关于for循环是用i++还是i--效率探讨
Torres
2012-03-26 02:56:52
通常我们在编写需要for循环实现的程序时有两种实现方法:
1. for(int i = 0;i<arr.length;i++)
2. for(int i = arr.length-1;i>=0;i--)
通过效率上的比较方案二要好于方案一。
个人认为他们的差异主要是在方案一每次是和一个大数做比较,而方案二是和零做比较。
计算机在处理这两种时做的是减法,处理起来方案二比较快。
以上是个人认为,放到这和大家共同讨论。
...全文
823
14
打赏
收藏
关于for循环是用i++还是i--效率探讨
通常我们在编写需要for循环实现的程序时有两种实现方法: 1. for(int i = 0;i=0;i--) 通过效率上的比较方案二要好于方案一。 个人认为他们的差异主要是在方案一每次是和一个大数做比较,而方案二是和零做比较。 计算机在处理这两种时做的是减法,处理起来方案二比较快。 以上是个人认为,放到这和大家共同讨论。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wood87654321
2012-03-29
打赏
举报
回复
所以结论就是:如果arr.length需要变化则使用++,否则使用--。
至于把arr.length保存到静态变量,前一种情况下不可能,后一种情况下则没必要
NeedHelper
2012-03-28
打赏
举报
回复
[Quote=引用 10 楼 shenzebang 的回复:]
你用arr.length的话,每次比较都要去读取arr.length这个值的。所以会比较慢,你吧这个值保存到一个const 变量里,然后再做回比较快,这个时候这个变量被当做编译常量。既快又安全。
[/Quote]
一旦保存到常量中就不能实时检测到arr长度的变化,只能用同步的方法做控制。
wzhiyuan
2012-03-28
打赏
举报
回复
浏览器js 里写的话,经实测
1,for(int i = 0;i<arr.length;i++) 最耗时,
2,for(int i=0,len=list.size();i<len;i++) 次之,
3, for(int i = arr.length-1;i>=0;i--) 最快
和大家的分析完全一致
1,最耗时不需多言,
2与3 基本上差距在10%之内
-- 与 0比较这点听了大家的分析,很长见识
Credo_
2012-03-27
打赏
举报
回复
for(int i=0,len=list.size();i<len;i++)
并且在循环中应该避免使用复杂的表达式,在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快。
最近刚看到的.
yxhshuaiman
2012-03-27
打赏
举报
回复
[Quote=引用 10 楼 shenzebang 的回复:]
你用arr.length的话,每次比较都要去读取arr.length这个值的。所以会比较慢,你吧这个值保存到一个const 变量里,然后再做回比较快,这个时候这个变量被当做编译常量。既快又安全。
[/Quote]
这个说法我认为对
shenzebang
2012-03-27
打赏
举报
回复
你用arr.length的话,每次比较都要去读取arr.length这个值的。所以会比较慢,你吧这个值保存到一个const 变量里,然后再做回比较快,这个时候这个变量被当做编译常量。既快又安全。
shenzebang
2012-03-27
打赏
举报
回复
似乎的确会这样。。[Quote=引用 8 楼 needhelper 的回复:]
两种方法在性能上差别不会很大,第二种写法会存在这样的漏洞,当在循环时arr的长度发生变化却无从得知。
[/Quote]
NeedHelper
2012-03-27
打赏
举报
回复
两种方法在性能上差别不会很大,第二种写法会存在这样的漏洞,当在循环时arr的长度发生变化却无从得知。
mathe
2012-03-26
打赏
举报
回复
只有:
1. arr.length可能会变化, 所以有可能比较时每次都要从arr里面取length的值.
是一个问题。
对于各楼上提到的其它"问题",均不是问题,编译器完全可以智能处理
lxtqq163
2012-03-26
打赏
举报
回复
Window下代码要转成机器代码,机器代码太繁琐,我们可以近似的用汇编语言来分析。
汇编下循环指令LOOP,它循环时 寄存器的值是递减的。
顶层转换到底层时,用++的方式理论上说会别扭,要多耗时间。
david-yue
2012-03-26
打赏
举报
回复
i- -操作本身会影响CPSR(当前程序状态寄存器),CPSR常见的标志有N(结果为负), Z(结果为0),C(有进位),O(有溢出)。i > 0,可以直接通过Z标志判断出来。
i++操作也会影响CPSR(当前程序状态寄存器),但只影响O(有溢出)标志,这对于i < n的判断没有任何帮助。所以还需要一条额外的比较指令,也就是说每个循环要多执行一条指令。
david-yue
2012-03-26
打赏
举报
回复
[Quote=引用 1 楼 fire_woods 的回复:]
1. arr.length可能会变化, 所以有可能比较时每次都要从arr里面取length的值.
2. 很多cpu和0比较可以减少1个指令.
3. 至少减少一个寄存器.
[/Quote]
i- -操作本身会影响CPSR(当前程序状态寄存器),CPSR常见的标志有N(结果为负), Z(结果为0),C(有进位),O(有溢出)。i > 0,可以直接通过Z标志判断出来。
i++操作也会影响CPSR(当前程序状态寄存器),但只影响O(有溢出)标志,这对于i < n的判断没有任何帮助。所以还需要一条额外的比较指令,也就是说每个循环要多执行一条指令。
fire_woods
2012-03-26
打赏
举报
回复
1. arr.length可能会变化, 所以有可能比较时每次都要从arr里面取length的值.
2. 很多cpu和0比较可以减少1个指令.
3. 至少减少一个寄存器.
750W高PF值充电机电源方案:基于UCC28070、ST6599和PIC16F193X的设计与实现
750W高功率因数(PF)充电机电源设计方案,采用TI公司的UCC28070作为交错式PFC控制器,ST公司ST6599用于LLC谐振变换,以及Microchip的PIC16F193X作为主控芯片。文中不仅提供了详细的原理图、设计文件和烧录程序,还分享了实际调试经验和技术细节。具体来说,PFC环节通过优化乘法器补偿和电流环参数实现了极高的PF值;LLC部分则着重于死区时间和谐振腔参数的精确配置;单片机部分负责状态管理和故障保护等功能。最终方案实测
效率
达到94%,相比传统方案节能显著。 适合人群:电力电子工程师、硬件开发者、嵌入式系统设计师,特别是对高效电源设计感兴趣的读者。 使用场景及目标:适用于需要设计高性能、高
效率
充电机的企业和个人开发者。目标是在满足高功率因数的同时,提高转换
效率
并降低能耗。 其他说明:附带完整的原理图、设计文件和烧录程序,有助于读者快速上手并进行实际项目开发。同时引用了华南理工大学硕士学位论文的相关理论支持,使方案更具权威性和可靠性。
JAVA控制台命令详解.pdf
JAVA控制台命令详解
远程PLC通讯编程调试监控方案:基于安全验证型中转服务器的云边协同解决方案
内容概要:本文介绍了远程PLC通讯编程调试监控方案,旨在解决传统PLC设备调试和维护过程中遇到的距离限制和技术支持难题。该方案采用安全验证型中转服务器,支持自定义网络设备接入,实现上千路PLC设备的并发对接调试。通过云边协同技术,实现了远程编程、实时监控和故障诊断等功能,极大提升了工作
效率
和设备稳定性。文中详细阐述了方案的核心——安全验证型中转服务器的工作原理及其提供的服务器和客户端源代码,强调了每个通信数据包均经过严格加密和验证,确保数据传输的安全性。此外,文章还
探讨
了云边协同带来的优势以及代码编写过程中的技术挑战和成就感。 适合人群:从事工业自动化领域的工程师、技术人员,尤其是那些负责PLC设备调试和维护的专业人士。 使用场景及目标:适用于需要远程调试和监控PLC设备的场合,如偏远地区的工程项目、大型制造企业等。主要目标是提高PLC设备的调试
效率
,减少现场维护成本,增强设备的可靠性和安全性。 其他说明:该方案不仅解决了实际工程中的痛点,也为工程师们提供了更多技术探索的机会,特别是关于云边协同技术和安全验证机制的学习和实践。
L-noodle-react-big-screen-13768-1753357219888.zip
cursor免费次数用完L-noodle_react-big-screen_13768_1753357219888.zip
鸿蒙中使用tree代码文件
测试数据
数据结构与算法
33,027
社区成员
35,336
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章