ios_base::sync_with_stdio(false); cin.tie(NULL);

ios_base::sync_with_stdio(false); cin.tie(NULL);

本文关键字:NULL cin tie stdio base sync with ios false      更新时间:2023-10-16

如果我们不使用它,谁能解释这个陈述的必要性和结果的变化。我读到这个: ios_base的意义::sync_with_stdio(假(;cin.tie(空(; 但无法理解。

通常使用标准C++流的输入和输出与 C 标准 I/O 流同步。例如,通过std::cout输出与stdout同步,具有std::cin的输入与stdin同步。

这种同步会减慢输出速度,并分别使用std::coutstd::cin输入,因此如果写入了大量输出或读取了大量输入,则可以通过调用sync_with_stdio(false)来禁用此同步。


关于tie的另一个问题是,默认情况下,std::coutstd::cin在某种程度上相互"捆绑"。这意味着,如果您尝试从std::cin读取输入,则将刷新std::cout流缓冲区中的所有缓冲输出。

对于交互式程序,这很好,因为这可确保在实际读取输入之前编写可能的输入提示。但同样,如果执行大量批量输入,这可能会在刷新输出时产生一些性能损失。


请注意,对于正常程序,这些可能的性能损失很小,几乎可以忽略不计,并且无关紧要。但这是一种为所谓的"竞争性"编程禁用它的模式。

我的建议是根本不使用它,除非您实际上已经测量,基准测试和描述此类问题属于程序中的前两个或可能是前三个瓶颈,并且有严格的性能要求禁用这些东西将有助于解决。