leetcode里这段强行加快运行速度的C++代码是什么意思?

论坛 期权论坛 study     
匿名的用户   2019-6-10 01:17   6301   5
能感觉到通过这个提高速度是很无聊的行为,但是这些代码是什么原理啊,我应该在学什么知识的时候会学到这些函数呢? 为什么是个int类型的。。。。
static int x = []() {
std::ios::sync_with_stdio(false);
cin.tie(NULL);
return0; }();
分享到 :
0 人收藏

5 个回复

倒序浏览
2#
热心的回应  16级独孤 | 2019-6-10 01:17:57 发帖IP地址来自
默认的时候,cin与stdin总是保持同步的,不必担心文件指针混乱,同时cout和stdout也一样,也是默认保持同步,这导致了cin有额外的开销,所以会更花时间。
当使用了:
  1. std::ios::sync_with_stdio(false);
复制代码
就是关闭了cin与stdin的同步,所以效率会和scanf相差无几


可以参考一下byvoid的文章:
探寻C++最快的读取文件的方案 - BYVoid
3#
热心的回应  16级独孤 | 2019-6-10 01:17:58 发帖IP地址来自
使用静态变量先于主函数初始化的特性强制在main之前关掉cout的同步
4#
热心的回应  16级独孤 | 2019-6-10 01:17:59 发帖IP地址来自
main函数前执行代码的技巧,不过这样写其实是不好的,因为你的代码可能会在stl初始化之前跑,然后GG
5#
热心的回应  16级独孤 | 2019-6-10 01:18:00 发帖IP地址来自
你可以去看《C++ Primer》第五版中文版学到这些知识。
这是一个 lambda 函数,刚开始可能会觉得这种写法很诡异,特别是很多函数嵌套的时候,参数是函数,返回值也是函数。这就成了函数式编程风格。
轮子哥说人一生最少要学20种语言,推荐必学的4种是 C++、Haskell、Ruby、Prolog。分别为编译型、函数式、动态型、逻辑型。
所以,学无止境,多看书。
6#
热心的回应  16级独孤 | 2019-6-10 01:18:01 发帖IP地址来自
分析一下这段代码
首先从[]() {
......
}
这段,是个lamda表达式,可以把它理解为一个函数,如果用auto fun =上面那段代码,那auto的值相当于是个function。
重点在于这个lamda后面跟着的();,我们把lamda用fun保存下来的话,那么后面跟个括号就相当于fun();,也就相当于调用了这个函数,那么它将会执行这个函数,并将返回值返回,所以static int x就相当于保存了这个函数的返回值。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:32080
帖子:6440
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP