关闭cin读入同步,加速程序

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中不支持默认参数),函数体和捕获列表不能省去。

发布了71 篇原创文章 · 获赞 38 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/u012839256/article/details/105001388
cin
今日推荐