关于ios::sync_with_stdio(false)的一些问题

Posted icecream

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于ios::sync_with_stdio(false)的一些问题相关的知识,希望对你有一定的参考价值。

使用ios::sync_with_stdio(false)可以让cin读入的更快,它的原理是使本该同步的输入输出流分开,就是让c风格的输入输出流和c++的输入输出流分开。

举一个具体的例子,在正常c++中,当我们用cin输入整数,当我们在键盘上输入的时候,我们输入的东西进到了缓冲区,假设我们输入了

6 3

两个数之间有空格,最后有回车

这些东西都进入了缓冲区,然后cin从缓冲区中读取这些字符,cin会一直读取到空格或者回车,第一个cin读到6,6之后的空格没有读,还在缓冲区中,接下来第二个cin会忽略掉空格,读取了3,在读到回车前结束,这时候缓冲区中还有个回车,如果接下来我们想用gets来读取字符串,那么gets会读到回车后结束,因为这时候缓冲区中正好就有个回车,所以gets会直接读到那个回车,然后结束读入,所以我们输入的字符并没有被gets读到,一般这个时候都会再定义一个字符c来吃掉回车。

如果这时候,我们在前边写了ios::sync_with_stdio(false)那么c的缓冲区和c++的缓冲区就会分开,还是进行和刚才同样的操作的话,这时候cin后的回车停留在了c++的缓冲区中,而gets是c函数,所以这时候gets是从c的缓冲区中读入字符,而这时c的缓冲区什么也没有,所以gets就等待输入,所以我们就把字符输入进了gets,而并没有用到用来吃掉回车的字符。

以上是关于关于ios::sync_with_stdio(false)的一些问题的主要内容,如果未能解决你的问题,请参考以下文章

关于ios::sync_with_stdio(false);和 cin.tie加速c++输入输出流

关于使用 std::ios::sync_with_stdio(false)出现的问题以及解决方案

std::ios_base::sync_with_stdio(false),优点,缺点?

由`std::ios_base::sync_with_stdio(false);`引起的重复输入问题

std::ios::sync_with_stdio(false);

std:ios:sync_with_stdio (false)以及局限性