static const auto _ = []() {
std::ios::sync_with_stdio(0);
std::cin.tie(0);
return 0;
}();
以上代码加速C++程序运行,可以来取消 iostream 的输入输出缓存,节省许多时间,使效率与scanf与printf相差无几。其中:
(1)C++与C兼容性解绑
C++为了保证程序在使用了 printf 和 cout 时不发生冲突,进行了兼容性处理。cin、cout之所以效率低,就是因为先把要输出的东西存入缓冲区,再输出,导致效率降低。因此,很多人都会选择使用 scanf 和 printf 以加快运行速度。如果我们不同时使用这两种输出方法的话,为了提高运行速度,我们可以将其解除绑定,这样做了之后就不能同时混用cout 和 printf。我们通过下面两句代码对其进行解绑。
std::ios::sync_with_stdio(0);
或
std::ios::sync_with_stdio(false);
(2)cin 与 cout 解绑
同时,C++在默认的情况下 cin 与 cout 也是绑定的,每次执行 << 操作符的时候都要调用 flush,这样会增加 I/O 负担。可以通过tie(0)(0表示NULL)来解除 cin 与 cout 的绑定,进一步加快执行效率。
std::cin.tie(0);
(3)Lambda函数的定义方式
Lambda表达式是C++11引入的特性,是一种描述函数对象的机制,它的主要应用是描述某些具有简单行为的函数。Lambda也可以称为匿名函数。
static const auto _ = []() {
}();
这里的[ ]是捕获列表,可以捕获所在函数中的局部变量。()代表了参数括号,参数为空,也可以省去括号(Lambda中不支持默认参数),函数体和捕获列表不能省去。