如何在不刷新缓冲区的情况下打印换行符? 我正在尝试C++,试图找出如何能从0到n尽可能快地打印数字。
起初,我只是用一个循环打印所有数字:如何在不刷新缓冲区的情况下打印换行符? 我正在尝试C++,试图找出如何能从0到n尽可能快地打印数字。,c++,C++,起初,我只是用一个循环打印所有数字: for (int i = 0; i < n; i++) { std::cout << i << std::endl; } for(int i=0;i
for (int i = 0; i < n; i++)
{
std::cout << i << std::endl;
}
for(int i=0;i std::coutTL;DR:通常,使用'\n'
而不是std::endl
更快,因为std::endl
说明:
std::endl
会导致缓冲区刷新,而'\n'
不会。
但是,您可能会也可能不会注意到任何加速,这取决于您应用的测试方法
考虑以下测试文件:
endl.cpp:
#include <iostream>
int main() {
for ( int i = 0 ; i < 1000000 ; i++ ) {
std::cout << i << std::endl;
}
}
#include <iostream>
int main() {
for ( int i = 0 ; i < 1000000 ; i++ ) {
std::cout << i << '\n';
}
}
#包括
int main(){
对于(int i=0;i<1000000;i++){
std::在写入之前,不能尝试取消设置cout
上的标志。不要使用endl
,因为它会强制刷新等。请使用'\n'
或“\n”
取而代之的是?或者您可以使用更精细的技巧将std::cout
的缓冲模式设置为完全缓冲。std::cout您会发现nobar的第三个答案有趣的是“\n”似乎与endl具有相同的效果。使用“\n”或endl打印0到1000000之间的数字大约需要20秒。如果没有它们,只需要大约3秒s
#include <iostream>
int main() {
for ( int i = 0 ; i < 1000000 ; i++ ) {
std::cout << i << '\n';
}
}