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
これはC++のコードではなく、Cコードです:あなたは
printf
バージョンの動作を一致させたい場合は代わりに、単に出力'\n'
。 'c'タグを削除してください – user3629249なぜ" cousync_with_stdio "と言ってもいいのか分かりません –
「同期」と「非同期」の意味を理解していますか? '同期'を指定すると、次のアクションが開始される前に各I.Oが完了します。 I.活動は重複していません。順番通りに。これにより、可能な限り複数のアクティビティが同時に実行されている「非同期」I/Oよりも、すべてのものが「ウォールクロック」の時間が大幅に短縮されます。 – user3629249