gpt4 book ai didi

c++ - 当 cin 和 cout 解开时使用 std::endl vs "\n"

转载 作者:行者123 更新时间:2023-11-30 01:34:08 25 4
gpt4 key购买 nike

Fast I/O建议在编程比赛中使用以下两行来加速 IO:

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

我可以理解删除同步。但是在解开 cin 和 cout 之后,我如何确保缓冲区不会溢出,cin 和 cout 正常工作而不会阻塞,并且当我不使用 std::endl 时缓冲区被正确刷新。使用“\n”会自动处理吗?

最佳答案

how do I ensure that the buffer doesn't get overflowed,

输出缓冲区不会“溢出”。当它变满时,它会自动刷新,即它的内容被写出并且它的长度被重置为 0。这就是 cin/cout 绑定(bind)与否的情况.

cin and cout work properly without blocking

您通常希望阻塞 cin/cout 上的操作。但同样,阻塞与非阻塞 I/O 与 cin/cout 是否绑定(bind)无关。

and buffer gets flushed properly when I am not using std::endl. Does the use of "\n" automatically handles it?

如果流处于行缓冲模式,则输出 '\n' 只会刷新缓冲区。如果输出到终端,cout 会自动进入行缓冲模式;否则它是 block 缓冲的(即它只有在运行满时才会被刷新)。

在编程竞赛中,cout 通常会转到管道或日志文件,因此它将被 block 缓冲并且 '\n' 不会导致刷新。然而,在那种情况下,在读取输入之前是否显示提示也无关紧要(这是绑定(bind) cin/cout 的正常用例)。只需确保生成正确的输出并让 I/O 库担心缓冲即可。缓冲区在运行满时、流关闭时以及程序退出时自动刷新。没有输出丢失(除非您的程序崩溃,但您还有其他事情需要担心)。

关于c++ - 当 cin 和 cout 解开时使用 std::endl vs "\n",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56909280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com