我试图了解缓冲区、endl 与 \n 以及为什么后者比 endl 更有效。
具体来说,我正在阅读这个 https://www.geeksforgeeks.org/buffer-flush-means-c/
下面的代码应该是一次输出1,2,3,4,5
#include <iostream>
#include <windows.h>
using namespace std;
int main()
{
for (int i = 1; i <= 5; ++i)
{
cout << i << " " ;
Sleep(300);
}
cout << endl;
return 0;
}
而以下将一次输出一个整数:
#include <iostream>
#include <windows.h>
using namespace std;
int main()
{
for (int i = 1; i <= 5; ++i)
{
cout << i << " " << flush;
Sleep(300);
}
return 0;
}
然而,两者在执行时看起来完全一样,它们一次出现一个。我的理解有误吗?
我也很困惑为什么与 \n 相比,endl 的效率较低。
从我读到的,endl 添加了一个 \n 然后刷新。
与 \n 相比,这不是更有效,因为它等待缓冲区已满然后立即输出所有内容吗?
请纠正我的错误理解,谢谢。
答案 0 :(得分:0)
如果您运行以下代码,您将清楚地看到区别:
#include <iostream>
#include <unistd.h>
using namespace std;
int main()
{
for (int i = 1; i <= 5; ++i)
{
cout << i << " " << flush;
usleep(300000);
}
cout<<"\n";
for (int i = 1; i <= 5; ++i)
{
cout << i << " " ;
usleep(300000);
}
cout << endl;
return 0;
}
std::endl 等价于使用 "\n" 并齐平。
如果您的程序稳定,那么只需使用“\n”,否则使用 std::endl。 "\n" 更有效,因为它不会强制立即刷新缓冲区。
同样在您的代码中,您现在可能会看到差异,因为您使用的是 Sleep() 以毫秒为单位接收输入,因此请尝试使用更大的值。