C++怎样提高代码效率

从非算法层面提高代码运行速度:
1.递归减少参数数量,比如说线段树。
【C++怎样提高代码效率】 2.减少对巨大数组的访问,访问太大的数组会减慢运行速度。
3.少用不必要的STL(比如说不动态分配内存就尽量不用vector)。
4.有时一些取模运算可以使用一个判断语句+减法代替。这个优化在模运算大量运用的语句中比较有用。
5.__builtin__系列函数
6.string速度奇慢,在竞赛中少用。
7.scanf和printf确实比cin和cout快上不少(有的题目使用cin和cout会直接Tle)。
8.想要比scanf更快,可以自己用getchar手写输入,读入量巨大的情况下效果明显。
9.还能更快一点么? 使用fread系列函数帮你在百度之星系列坑人比赛中夺得一等奖。
10.少写递归,多用迭代,比如神奇的循环版isap,非常XX。
11.更加丧心病狂的优化,可以参考WC2017《论程序底层优化的一些方法与技巧》。
12.等等等等...
13.如果在使用众多诸如此类此时还是不能通过题目,那么只有两种可能:
出题人非常丧心病狂/你的算法复杂度或实现出现了问题。
一般来说,ACM竞赛题目都不会让选手写出了正确的算法但是无法通过测试的(卡常数),这些技巧在大部分情况下对错误代码或时间复杂度不对的代码没有很大帮助,但是ACM中实现代码时对这些细节过度不重视依然有可能让一个正确的思路无限Tle。
总而言之,ACM竞赛中算法的优秀程度是永远排在第一位的,但是使用更好的实现方法提升代码速度也是竞赛中的重要技巧(而且近年(WC2017万恶的第二题)出现了以此类优化方法为考点的题目)。

■网友
算法层的优化比scnaf和cin的区别强多了,只要你这层弄好,比其他层有用多了。
■网友
学编程这样拉单子记忆黑科技是很低效和容易过时(出错)的。知其然知其所以然(以及知道如何有效学习新知识)才能立于不败之地。比如第1点,是对的吗?如果是,为什么?如果不是又为什么?比如第二点,为什么少用endl,endl背地里干了什么不如\快的事?又在什么情况下我们不需要纠结endl还是\?等等。


    推荐阅读