zoukankan      html  css  js  c++  java
  • 关于竞赛大佬常用的 static const auto _ = []() 用法解析

    前言

    在刷Leetcode的时候发现很多运算速度极快的代码都有这一段,所以研究一下.

    static const auto _ = []()
    {
        ios::sync_with_stdio(false);
        cin.tie(nullptr);
        return nullptr;
    }();
    
    

    第一次见这种代码懵了下,auto有接触过,其他就不太熟悉。

    另一篇文章里也有详细解析

    [黑胡椒和盐](https://blog.csdn.net/qq_32320399/article/details/81518476)

    Lambda

    属于C++11的新特性,没有好好研究过啊,还需要多学习。(C++ Primer 第十章泛型算法中有提到)

    C++ 11 Lambda表达式

    Lambda也可以看做一种函数的定义方式,不过可以在函数内部声明定义 并且直接使用,必须使用尾置返回,并且是一个可调用对象,可以使用调用运算符(())(没错就是这个括号,跟在函数后面的)。
    这里的[]即捕获列表,可以捕获所在函数中的局部变量,()代表了参数括号,参数为空,也可以省去括号(Lambda中不支持默认参数),函数体和捕获列表不能省去。

    ios::sync_with_stdio(false)

    可以参考此处: ios::sync_with_stdio(false)
    主要作用是提高c++ cin cout 的速度,cin和cout原本的效率较低,涉及到要将输入输出存入缓存区。

    cin.tie(nullptr);

    这里的主要作用是将cin和cout解除绑定,因为std :: cin默认是与std :: cout绑定的,所以每次操作的时候(也就是调用”<<”或者”>>”)都要刷新(调用flush),这样增加了IO的负担,通过tie(nullptr)来解除std :: cin和std :: cout之间的绑定,来降低IO的负担使效率提升(这段复制自上面那篇)。

    总结

    这段函数的主要作用就是提高输入输出的速度,貌似是好多竞赛大佬都用的,我只能瑟瑟发抖了。

  • 相关阅读:
    git 工作流程
    微信小程序 scroll-view 水平滚动使用
    微信小程序 tree组件
    微信小程序各类生命周期
    JS/Jquey 图片链接点击直接下载
    JS/Jquery 表单方式提交总结
    Nodejs 发送邮件 激活邮箱
    搭建Nodejs环境 创建Express应用
    break、continue、return区别
    shell(一)
  • 原文地址:https://www.cnblogs.com/RioTian/p/12460494.html
Copyright © 2011-2022 走看看