我正在嘗試用C++試圖弄清楚如何儘可能快地打印從0到n的數字。如何在不刷新緩衝區的情況下打印換行符?
起初我只是打印的所有有循環的數字:
for (int i = 0; i < n; i++)
{
std::cout << i << std::endl;
}
不過,我想這會刷新其輸出,也一定必須花費一些時間的每一個號碼後緩衝區,所以我嘗試首先將所有數字打印到緩衝區(或者實際上直到它看起來完全滿了,然後自動刷新),然後一次沖洗。然而,它似乎打印\ n刷新後像STD緩衝區:: ENDL所以我忽略它:
for (int i = 0; i < n; i++)
{
std::cout << i << ' ';
}
std::cout << std::endl;
這似乎跑的比第一個例子快約10倍。不過,我想知道如何將所有值存儲在緩衝區中並一次全部刷新,而不是每次刷新時都讓它刷新,所以我有幾個問題:
- 是否可以打印換行符沒有沖洗緩衝區?
- 如何更改緩衝區大小,以便我可以將所有值存儲在其中並將其清除到最後?
- 這是輸出文字啞的方法嗎?如果是這樣,爲什麼,以及它會是更好的替代方案?
編輯:看來,我的結果是通過一個laggy系統(智能手機的終端應用程序)偏置......有了更快的系統的執行時間沒有顯示出顯著差異。
嘗試在寫入之前在'cout'上取消設置[unitbuf](http://en.cppreference.com/w/cpp/io/manip/unitbuf)標誌。 –
請勿使用'endl',因爲它會強制沖洗等。請使用'\ n''或'「\ n」'代替?或者你可以進入更詳細的技巧,設置'std :: cout'的緩衝模式爲完全緩衝。 –
'std :: cout <<'\ n''打印一個新行。除非有理由,否則不要手動刷新。 – nwp