顾得泉:个人主页
个人专栏:《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++小一丢丢哦。希望本篇文章的分享会对大家的学习带来些许帮助,如果大家有相同的案例分享,欢迎大家在评论区留言~~~