Excited卡常数技巧

技巧1:编译优化

 

    1.使用inline

    inline函数只是对编译器的一个建议,最后是不是真正成为内联函数,还是要看Compiler。

    inline的使用是有所限制的,inline只适合函数体内代码简单的函数使用,不能包含复杂的结构控制语句例如while、switch,并且内联函数本身不能是递归函数

 

    2.使用rigister

    register关键字只是对编译器的一个建议,最后是不是真正存放在寄存器内,还是要看Compiler。

    使用register修饰的变量不能占太大的内存空间,或者不能使用太多register变量

    使用register修饰的变量不能用&取地址(没有内存地址)

    使用register修饰的变量不能为全局变量

    建议在循环变量和快速读入(又叫读入优化)的时候使用

 

技巧2:调用优化

 

    1.不传参

    明了简单。多用全局变量少传参。

    在STL Sort+自定义bool cmp()函数的双关键字升序排序和手写双关键字升序排序中,传参比较少的手写函数在200000数据的时候可以快0.07~0.1s,相当于跑四五次sort的时间了。(对此结果有疑问的,留下邮箱,发送测试文件夹)

 

    2.void类型的函数不写return

    玄学吧这个大概是(为什么好说倒装句山东人???)

 

    3.如果某变量只在一个函数中用到,尽量开成局部变量

    玄学。

 

技巧3:执行优化

 

    1.手写 不用STL

    不解释了吧。有些时候STL很慢,相见lrj紫书

 

    2.

 

    3.使用Fill (#include<iterator>)和 memset (#include<cstring>)

 

    这两个东西比for赋值要快。

 

    4.循环展开

 

    5.a[0]=a[1]=1;比a[0]=1; a[1]=1;快?

 

    玄学吧……应该没多大效果

 

    6.读入优化

这个没负数,自己加吧。

 

 

    7.运算优化

    double除法比int除法快

    bool运算比算术运算快

    减法比加法乘法快

    尽量快速幂

 

    8.可能的话,空间换时间

 

    9.不是很确定的方法

    &比return快???

One Comment

发表评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据