【发布时间】:2018-04-13 16:11:46
【问题描述】:
我刚刚进入了竞争性编程的世界,因此,我阅读了几篇文章来掌握程序员在用 c++ 编写代码时应该遵循的最佳策略。
我在某处读到应该在行尾使用'\n' 代替std::endl,因为std::endl 强制缓冲区刷新。
我不知道“刷新缓冲区”是什么意思,所以我开始搜索它并遇到了这个答案 What does flushing the buffer mean? 阅读答案后,我得到“刷新缓冲区”的想法是打印并清除所有内容在控制台的输出缓冲区中。
所以,为了检查答案的有效性,我在我的机器上制作了这个程序。
#include <iostream>
#include <time.h>
using namespace std;
int main()
{
struct timespec tim, tim2;
tim.tv_sec = 3;
tim.tv_nsec = 0;
for(int i=0; i<5; i++)
{
cout << i << endl;
nanosleep(&tim , &tim2);
}
return 0;
}
我执行程序得到的结果如预期的那样。循环打印 0 到 4,每次迭代后延迟 3 秒。
但是,当我将 endl 更改为 '\n' 时,我希望结果会在 15 秒后立即显示在控制台上。但是,数字是在与前一种情况相同的延迟后输出的。现在,如果'\n' 不刷新输出缓冲区,我不应该得到我期望的结果吗?
【问题讨论】:
-
顺便说一句,“竞争性编程”和“程序员应该遵循的最佳策略”是完全无关的。竞争性编程会促使您使用任何理智的程序员都不会在实际代码中使用的策略
-
尝试使用文件作为输出。