分享一个刚刚学到的骚操作与一些基础优化
Posted 我又双叒叕打铁了
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分享一个刚刚学到的骚操作与一些基础优化相关的知识,希望对你有一定的参考价值。
一.手动加栈
我们有时候会栈溢出,类似于递推的时候,这时候我们就可以用到下面这个操作,来手动加栈。
#pragma comment(linker,"/STACK:1024000000,1024000000")
原理自行百度,预处理指令详解。
二.寄存器的运用
其实这个相信大家C时很早就知道了,但是貌似用的人比较少。下面可以给出实际应用实例:
int main() { for (register int i = 1; i < inf; i++) { printf("%d",i); } return 0; }
但是,其实C++会自动优化,所以C++没必要用这个操作了。
三.几个基础的位运算操作
其实这个几个也很平常,很早就会了,但是还是顺便分享一下吧。
1.除二乘二的操作
位运算对变量的 >> 和 << 相当于除以2和乘以2,但是效率会更高一点,不用先转换。
2.判断奇偶性
对变量用 &1 ,在二进制中奇数的最后一位永远是1,偶数永远是2,而&1的作用就是取变量的二进制数的最后一位。
3.异或交换两个数
其实异或交换的 效率不如三变量交换,效率不如三变量交换,效率不如三变量交换(说三遍)
而且在数组操作中,如果是前后交换,奇数的话最后会 自己异或自己,导致结果为 0.
四.短路运算符 && 和 || 的巧用
我们知道 当 && 左边的判断为 false 时,就会直接返回 false,不会继续往右判断
而 || 左边的判断为 true 时,就会直接返回 true ,不会继续往右判断
这样的话我们就可以用它们来 代替 if 和if-else
A&&B 等同于 if(A) B;
A&&B || C 等同于 if(A) B else C;
五.三目运算符和代替 if-else
其实一直都知道三目预算符,但是没想过效率,平常也就不怎么用
A?B:C 等同于 等同于 if(A) B else C;
六.内联函数
如果经常调用同一函数,例如swap,不妨设置为内联函数,也就是在函数头加一个 inline
但是如果被调用函数太过复杂的话,还是不建议用内联函数,例如dfs。
以上是关于分享一个刚刚学到的骚操作与一些基础优化的主要内容,如果未能解决你的问题,请参考以下文章
阿里问题定位神器 Arthas 的骚操作,定位线上BUG,超给力