關于scanf和cin的大數據讀入效率
好多大佬都說scanf的讀入效率比cin高,我也當練手,用書上的程序用了個測試,程序如下:
#include<iostream>
#include<ctime>
#include<cstdio>
#include<windows.h>
using namespace std;
const int num=10000000;
int main(){
freopen("randnum.in","r",stdin);
int i,n,start,end;
start=clock();
for(int i=0;i<num-2;i++)scanf("%d",&n);
end=clock();
cout<<double(end-start)/CLOCKS_PER_SEC<<endl;
freopen("randnum.in","r",stdin);
//ios::sync_with_stdio(false);關閉cin的同步
start=clock();
for(int i=0;i<num-2;i++)cin>>n;
end=clock();
cout<<double(end-start)/CLOCKS_PER_SEC<<endl;
return 0;
}
?結果如下:
4.793
6.019
再測試一次,結果如下:
4.793
5.976
基本可以認定,scanf效率比cin高。
然后我關閉cin的同步,執行"ios::sync_with_stdio(false);關閉cin的同步”,再測試
結果如下:
4.768
1 .235
再測試一次,結果如下:
4.743
1.229
個人結論:在保持cin讀入同步的情況下(默認設置),scanf的效率比cin高20%左右,關閉同步的情況下,cin比scanf的效率高285%,測試數據均為4位整數。
測試次數有限,如有不符,請指正。
(本機軟件硬件信息如下,C++環境為dev c++5.11 TDM GCC 4.9.2)
?結果如下:
4.793
6.019
再測試一次,結果如下:
4.793
5.976
基本可以認定,scanf效率比cin高。
然后我關閉cin的同步,執行"ios::sync_with_stdio(false);關閉cin的同步”,再測試
結果如下:
4.768
1 .235
再測試一次,結果如下:
4.743
1.229
個人結論:在保持cin讀入同步的情況下(默認設置),scanf的效率比cin高20%左右,關閉同步的情況下,cin比scanf的效率高285%,測試數據均為4位整數。
測試次數有限,如有不符,請指正。
(本機軟件硬件信息如下,C++環境為dev c++5.11 TDM GCC 4.9.2)
CPU:雙核i5-7500 3.41 3.40? 內存:8G? 系統:64位win10