当前位置: 主页 > 奇亿注册 > 网站建设
项目服务
  • 提交需求
  • 策划设计
  • 技术开发
  • 维护修改
  • 售后服务

能感觉到通过这个提高速度是很无聊的行为,但是这些代码是什么原理啊,我应该在学什么知识的时候会学到这些函数呢? 为什么是个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)不大记得了,大概是接触输入流的什么东西与输出流的绑定。

效果很小。

平台注册入口