37_C语言提高效率小技巧

1,for循环遍历字符串:

普通写法
for (int i = 0; i < strlen(s); i++)

高效率写法,用变量保存长度,不用每次执行函数strlen(s)
for (int i = 0, len = strlen(s); i < len; i++)

2,for循环内部临时变量

//变量写在内部
for (int i = 0; i < 10; i++)
{
 string s = ss[i];
 ...
}


//高效率写法:变量写在外部,不用每次创建变量
string s;
for (int i = 0; i < 10; i++)
{
 s = ss[i];
 ...
}

3,基本运算符的操作

  • 1.在乘以2(或2的整数次幂)或除以2(或2的整数次幂)的时候尽量用位运算来替代。
  • 2.尽量减少使用除法运算(可以适当转换为乘法,如条件判断时将if (a == b / c)替换为if (a * c == b)。除法运算需要更多的移位  和转换操作,往往需要的时间是相应乘法的两倍)
  • 3.多使用+=、-=、*=、/=等复合运算符,以加一为例,效率由高到低是(i++ 、 i += 1 、 i = i + 1)
  • 4.多掌握一些小巧的库函数,例如:swap, max, min, sort, qsort, ati, stoi...它们用起来方便,效率更是比一般人写的代码高。

4,inline、const、&修饰符的使用

  • inline让函数内联,建议编译器将函数体代码“复制粘贴”到函数调用处,在函数体短小,函数调用又比较频繁的时候能有效避免因函数调用带来的内存开销(因为每一次调用函数系统都会生成许多额外的变量)。
  • const不仅仅可以保证其修饰的变量不被修改,提高程序的稳定性,同时也让编译器更好地为我们优化代码。举个例子:我们如果用const修饰某一个常量,那么程序中所有用到该常量的地方都会用其值来代替,这样就避免了读取其地址而浪费时间。
  • &修饰返回值类型和参数类型表示采取引用的方式传递,避免了对象赋值构造所需的时间和内存。

5,if条件判断:预判大部分结果的区间

//没毛病的写法
for 所有学生分数
 if 分数 < 60
   归为不及格段
 else if 分数 < 70
   归为及格段
 else if 分数 < 80
   归为良好段
 else 
   归为优秀段

//高效率的写法,大多数是良好和优秀,上边前两个if大多数是多余的判断
for 所有学生分数
 if 分数 >= 80
   归为优秀段
 else if 分数 >= 70
   归为良好段
 else if 分数 >= 60
   归为及格段
 else 
   归为不及格段

6,switch分支的判断:尽量分支少,并与连续枚举配合使用最佳

switch语句的底层实现主要有三种方式:转换为if else 语句,跳转表,树形结构。

当分支比较小时,编译器倾向于转换为if else语句,当分支比较多,分支范围很广时,用树形结构,当分支数量不算多,分支范围紧凑时,用跳转表。跳转表的底层实现是数组映射,对条件转换的效率为O(1),相比于另外两种方式优势明显,因此我们应该尽量控制分支的数量,以及让各个分支的int型数据紧凑。

猜你喜欢

转载自blog.csdn.net/a_horse/article/details/82455060