在阅读学习别人的代码的过程中,我们有时会发现这么一行:
std::ios::sync_with_stdio(false);
这是由于cin比scanf要慢很多,在需要大量读入时,用此行代码可以使cin更快。
为什么cin比scanf更慢呢?
标准 C++ 流与标准 C 流在每次输入/输出操作后同步,同步的 C++ 流为无缓冲,而每次 C++ 流上的 I/O 都立即应用到对应 C 流的缓冲区。这使得能自由地混合 C++ 与 C I/O 。
另外,同步的 C++ 流保证为线程安全(从多个线程输出的单独字符可能交错,但无数据竞争)。
若关闭同步,则允许 C++ 标准流独立地缓冲其 I/O ,可认为这在某些情况下更快。
所有八个标准 C++ 流默认与其相应的 C 流同步。
若在标准流上已出现 I/O 后调用此函数,则行为是实现定义的:有的实现无效果,有的实现销毁读取缓冲区。
标准 C++ 流为下列者: std::cin 、 std::cout 、 std::cerr 、 std::clog 、 std::wcin 、 std::wcout 、 std::wcerr 和 std::wclog 。
标准 C 流为下列者: stdin 、 stdout 和 stderr 。