如何在不刷新缓冲区的情况下打印换行符? 我正在尝试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;istd::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';
    }
}