一些 C++ 的卡常技巧

是的,这篇文章的主要内容非常好懂,相信各位同学也十分感兴趣 毕竟哪位OIer不想自己的代码跑得飞快呢

那么我们就进入正题吧!

First

众所周知,一份代码里面必然会有很多循环打表的话当我没说,而循环自然是十分占时间的。

所以我们要做的就十分清楚了:加速循环!

1. 把 int 改成 register int

register int 表示使用cpu内部寄存器(寄存器为中央处理器内的组成部分,是有限存贮容量的高速存贮部件)的变量。

而平时的 int 是把变量放在内存中,存到寄存器中可以加快变量的读写速度。

2. 把 i++ 改成 ++i

i++ 是先计算再储存,而 ++i 是先储存再计算。

一般情况,两者的效率相比之下,自然是 ++i 更胜一筹。

Second

函数是很常用的一个东西,很大意义上,它可以看出我们做题的思路是否明晰。

如果你想要让你的代码的运行速度更快,可以试着在你的函数类型前面加上 inline

inline 可以把函数指定为内联函数,这样可以解决一些频繁调用的函数大量消耗栈空间(栈内存)的问题。

Third

俗话说得好,“十年OI一场空,不开 long long 见祖宗”。

但是long long 占用的二进制位是 int 的两倍,所以计算机处理 long long 类型的变量的时候花费的时间会更长。

Forth

有些题的输入和输出十分毒瘤,动不动就几十万几百万的数据能轻松把你的时间拉特别高。

所以,快读快写出现了,以下为快读快写代码,可直接食用。

char ch;
inline void read(int &x)
{
    while((ch=getchar())<48||ch>57);
    x=ch^48;
    while((ch=getchar())<58&&ch>47)  x=(x<<1)+(x<<3)+(ch^48);
}

Fifth

因为位运算是直接对二进制的位进行运算,而且计算机处理位运算和三目运算符要比正常计算快。

所以在写一些代码时,可以这样优化:

max(x,y)  ->  x>y?x:y
min(x,y)  ->  x<y?x:y
x%2  ->  x&1
x/2  ->  x>>1
x*2  ->  x<<1;

Sixth

因为 using namespace std 的功能仅仅是让你在调用标准函数库的时候不在前面加上 std::,所以为了让代码更快完全可以将他删掉。

但是因为每一次都要写 std:: 太麻烦,我在这么干的时候一般都会 define _ std::

posted @ 2024-07-12 13:19  未抑郁的刘大狗  阅读(51)  评论(0编辑  收藏  举报