能感觉到通过这个提高速度是很无聊的行为,但是这些代码是什么原理啊,我应该在学什么知识的时候会学到这些函数呢? 为什么是个int类型的。。。。
static int x=[](){
std::ios::sync_with_stdio(false);
cin.tie(NULL);
return0; }();
默认的时候,cin与stdin总是保持同步的,不必担心文件指针混乱,同时cout和stdout也一样,也是默认保持同步,这导致了cin有额外的开销,所以会更花时间。
当使用了:
std::ios::sync_with_stdio(false);
就是关闭了cin与stdin的同步,所以效率会和scanf相差无几
可以参考一下byvoid的文章:
探寻C++最快的读取文件的方案 - BYVoid分析一下这段代码
首先从[](){
......
}
这段,是个lamda表达式,可以把它理解为一个函数,如果用auto fun=上面那段代码,那auto的值相当于是个function。
重点在于这个lamda后面跟着的();,我们把lamda用fun保存下来的话,那么后面跟个括号就相当于fun();,也就相当于调用了这个函数,那么它将会执行这个函数,并将返回值返回,所以static int x就相当于保存了这个函数的返回值。
这个不无聊吧,刷题有时会用。和int没一点关系。重要的是后面的函数。其次,这样写就像轮子哥说的。会出错。里面核心的就是关闭个功能。但不如c的那个快。这个优化效果很好,对于刷题
使用静态变量先于主函数初始化的特性强制在main之前关掉cout的同步
第二行:ios::sync_with_stdio(fasle)
解除标准输入输出与标准输入输出流同步,让输入流速度大幅优化,但是还是没有标准输入快.....
下一行cin.tie(0)不大记得了,大概是接触输入流的什么东西与输出流的绑定。
效果很小。