關於競賽大佬常用的 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的負擔使效率提升(這段復制自上面那篇)。

總結

這段函數的主要作用就是提高輸入輸出的速度,貌似是好多競賽大佬都用的,我只能瑟瑟發抖了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM