為了讓大家瞭解C++各種IO方式的效能,於是就有了這篇文章。
本次測試採取的資料均為 \(10^6\) 個不超過 \(10^8\) 隨機正整數。
測試程式碼:
#include<bits/stdc++.h>
using namespace std;
int x;
int main(){
freopen("test.in","r",stdin);
freopen("test.out","w",stdout);
double s=clock();//記錄開始時間
for(int i=1;i<=1000000;i++){
//測試內容
}
cerr<<clock()-s<<"\n";//在終端輸出執行時間
return 0;
}
輸入測試
scanf
\(328\) 毫秒
無最佳化cin
\(577\) 毫秒
最佳化後cin
\(81\) 毫秒
快讀(不考慮負數)
\(155\) 毫秒
輸出測試
輸出每一個數後換行
printf
\(989\) 毫秒
無最佳化cout(endl)
\(1447\) 毫秒
最佳化後cout(endl)
\(1386\) 毫秒
無最佳化cout(\n)
\(61\) 毫秒
最佳化後cout(\n)
\(73\) 毫秒
快寫
\(105\) 毫秒
總結
輸入
如果不想關閉讀寫同步的話就用快讀,總之不要用原生的 cin
。scanf
處於中立。
輸出
快寫的最佳化作用比快讀小得多,幾乎沒有。
正常的 printf
足夠。
endl
換行的 cin
慢的要死,打死也不要用。
建議用 \n
換行,最佳化不重要。
綜上所述,不關閉讀寫同步建議用快讀+ \(\texttt{cout}\)(\n換行),關閉讀寫同步就無腦 cin/cout。