1. 程式人生 > >ACM輸入函數測試 - scanf cin 優化的輸入

ACM輸入函數測試 - scanf cin 優化的輸入

i++ cnblogs iostream const c++ sin nbsp pen scanf

2017-08-27 10:26:19

writer:pprp

進行測試如下四種輸入方式:

1、scanf

2、cin

3、用了ios::sync_with_stdio(false);的cin

4、自己寫的輸入函數(如下)

inline int read()
{
    int X=0,w=1;
    char ch=0;
    while(ch<0 || ch>9)
    {
        if(ch==-) w=-1;
        ch=getchar();
    }
    while(ch>=0 && ch<=9) X=(X<<3
)+(X<<1)+ch-0,ch=getchar(); return X*w; }

測試先隨機生成了1000以內數,保存在out.txt文件中,大概2M的內容

開始測試輸入:

代碼如下:

/*
@theme:ACM輸入輸出測試
@writer:pprp
@declare:測試scanf,優化的輸入,和cin
@date:2017/8/26
*/
#include <bits/stdc++.h>
#include <iostream>
#include <time.h>
#include <windows.h>
#include <unistd.h>

using
namespace std; const int maxn = 100000; int a[maxn],b[maxn]; inline int read() { int X=0,w=1; char ch=0; while(ch<0 || ch>9) { if(ch==-) w=-1; ch=getchar(); } while(ch>=0 && ch<=9) X=(X<<3)+(X<<1)+ch-0,ch=getchar(); return
X*w; } int main() { ios::sync_with_stdio(false); freopen("out.txt","r",stdin); // freopen("out.txt","w",stdout); clock_t c = clock(); for(int i = 0 ; i < maxn ; i++) { // scanf("%d%d",&a[i],&b[i]); // cin >> a[i] >> b[i]; // a[i] = read(); // b[i] = read(); } clock_t d = clock(); cout << d - c << endl; fclose(stdin); fclose(stdout); }

測試結果是:時間:自己寫的輸入函數 < 用了ios::sync_with_stdio(false);的cin < scanf < cin

所以在ACM輸入要求嚴格的情況下,建議采用ios::sync_with_stdio(false)的cin

如果要求更加嚴格那就采用,自己寫的輸入函數

ACM輸入函數測試 - scanf cin 優化的輸入