基于for循环中i++与++i的思考(个人发现)

顾得泉:个人主页

个人专栏:《Linux操作系统》 《C++从入门到精通》  《LeedCode刷题》

键盘敲烂,年薪百万!


       小伙伴们都知道,在for循环的执行过程中,无论是选择++i还是i++,最终对循环的控制和结果的影响都是一致的。也就是说,只要不涉及到表达式取值的问题,两者都是让i自增,效果相同,那么我们今天来探讨一下他们有什么不同的地方。


一、工作原理

       i++的操作实际上是先引用当前的值然后再增加,而++i则是先增加然后再引用新的值。在i++的情形下,因为需要保存原始的值以便在增加之前使用,编译器会创建一个临时变量来存储这个原始值。这个过程不仅占用了额外的内存资源,还可能降低性能,尤其是在大数据量时,这种性能损耗会更加明显。

       从性能角度考虑,在执行for循环时,如果循环体执行的次数极多,那么这种差异会变得更为重要。实际测试表明,当循环次数达到一定的量级后,使用i++的循环会比使用++i的循环耗时明显增加。这是因为随着循环次数的增加,创建临时变量和额外的内存操作所导致的开销累积起来,形成了可观测的性能差异。

       在内存使用方面,由于i++需要额外创建临时变量来保存未自增前的数值,这样就增加了内存的使用。而++i则不需要这个步骤,它在原变量上直接进行操作,从而节省了内存资源。这种差异在内存敏感或者有限的环境中尤其重要。

       所有在大多数情况下,我们可能不会注意到两者之间的性能差异,但在数据量大和性能要求高的场合,尽量使用++i是一个更为高效的选择。这不仅可以提高代码的执行效率,还可以在一定程度上节约系统资源。

       因此,我们总能看到,各类大佬建议在编写for循环时,特别是在编写高性能程序或在大量迭代中,优先选择++i以获得更好的性能表现。


二、我的发现

       前天在刷题过程中,借鉴了一下别人的代码题解(leetcode75.颜色分类),有点奇怪,为什么同样的代码,他的用时0ms,击败100%,我的就不行,leetcode平台网络的波动嘛?不会吧,再波动也不可能差那么多,于是仔细对比,发现了一个区别。

       因为知道上文的结论,平时在刷题编程过程中,我一直使用的是++i,题解作者使用的是i++,抱着修改试试看的态度,不试不知道,直接击败100%,我嘞个豆!!!截图为证!

       看时间是前天的,当时有些疑惑,去问了大佬博主,然后就没再考虑了:

       接着今天看到了一个面试题,就想着做一下(面试题02.02.返回倒数第k个节点):

       又是++i起手,好的击败20%,又回想到前天的事情,实践一下,靠!!!:


结语:看来后面刷leetcode的题,想拿低时耗击败更多的人我就换i++了(斜眼笑),但是大家有没有发现,++i的内存消耗确实比i++小一丢丢哦。希望本篇文章的分享会对大家的学习带来些许帮助,如果大家有相同的案例分享,欢迎大家在评论区留言~~~

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

顾得泉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值