2016-09-03 5 views
2

私はちょうどcinとscanfとprintfよりも遅くなるcoutを使用して知っている。しかし、the top answerは、std :: ios :: sync_with_stdio(false)を使用するとscanf & printfより速くなると言います。しかし、私はこの実験を行い、それが正しくないことを発見しました。それは私のせいですか?どうして?std :: ios :: sync_with_stdio(false)を使うとscanfやprintfよりも高速になるでしょうか?

cinを&coutより速くscanf & printf(ファイルを読むことを含む)を使用する正しいコードとは何ですか?ありがとう。 ()(真のstd ::イオス:: sync_with_stdio)& COUT CINを使用して

#include<cstdio> 
#include<iostream> 
#include<ctime> 
#include<fstream> 
#include<iomanip> 
//FILE *data = freopen("test.in","w",stdin); 
FILE *fi = freopen("test.in","r",stdin); 
FILE *fo = freopen("test.out","w",stdout); 
int main() 
{ 
    int ans = 1; 
    while(~scanf("%d",&ans)) 
    { 
     printf("%d\n",ans); 
    } 
    return 0; 
} 

のprintf scanfの&を使用して

生成データ

#include<cstdio> 
#include<iostream> 
#include<ctime> 
#include<fstream> 
#include<iomanip> 
FILE *data = freopen("test.in","w",stdin); 
//FILE *fi = freopen("test.in","r",stdin); 
//FILE *fo = freopen("test.out","w",stdout); 
int main() 
{ 
    for(int i=1;i<10000000;i++) 
     printf("%d\n",i); 
    return 0; 
} 

:ここ

は私のコードです
#include<cstdio> 
#include<iostream> 
#include<ctime> 
#include<fstream> 
#include<iomanip> 
//FILE *data = freopen("test.in","w",stdin); 
FILE *fi = freopen("test.in","r",stdin); 
FILE *fo = freopen("test.out","w",stdout); 
int main() 
{ 
    std::ios::sync_with_stdio(true); 
    int ans = 1; 
    while(std::cin>>ans) 
    { 
     std::cout<<ans<<std::endl; 
    } 
    return 0; 
} 

使用のstd ::イオス:: sync_with_stdio(偽)

#include<cstdio> 
#include<iostream> 
#include<ctime> 
#include<fstream> 
#include<iomanip> 
//FILE *data = freopen("test.in","w",stdin); 
FILE *fi = freopen("test.in","r",stdin); 
FILE *fo = freopen("test.out","w",stdout); 
int main() 
{ 
    std::ios::sync_with_stdio(false); 
    int ans = 1; 
    while(std::cin>>ans) 
    { 
     std::cout<<ans<<std::endl; 
    } 
    return 0; 
} 

結果:あなたはstd::endlで、一つ一つの時間をstd::cout紅潮している

scanf version:       4.918 seconds 
iostream version:      51.266 seconds 
iostream with sync_with_stdio(false): 31.815 seconds 
+0

これはC++のコードではなく、Cコードです:あなたはprintfバージョンの動作を一致させたい場合は代わりに、単に出力'\n'。 'c'タグを削除してください – user3629249

+0

なぜ" cousync_with_stdio "と言ってもいいのか分かりません –

+0

「同期」と「非同期」の意味を理解していますか? '同期'を指定すると、次のアクションが開始される前に各I.Oが完了します。 I.活動は重複していません。順番通りに。これにより、可能な限り複数のアクティビティが同時に実行されている「非同期」I/Oよりも、すべてのものが「ウォールクロック」の時間が大幅に短縮されます。 – user3629249

答えて

5

しないでください。

std::cout << ans << '\n'; 
関連する問題