Using std :: ios :: sync_with_stdio (false) kann schneller sein als scanf und printf?
Ich weiß nur, dass cin und cout langsamer sind als scanf und printf. Jedoch,die beste Antwort sagt, dass die Verwendung von std :: ios :: sync_with_stdio (false) schneller sein kann als scanf & printf. Allerdings habe ich dieses Experiment durchgeführt und festgestellt, dass es nicht richtig war. Ist es meine Schuld? Warum
Was ist der richtige Code, um cin & cout schneller als scanf & printf zu verwenden, einschließlich des Lesens von Dateien. Vielen Dank
Hier ist mein Code:
Daten generieren
#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;
}
Mit scanf & printf
#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;
}
Mit cin & cout (std :: ios :: sync_with_stdio (true))
#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;
}
Using std :: ios :: sync_with_stdio (false)
#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;
}
Ergebnis
scanf version: 4.918 seconds
iostream version: 51.266 seconds
iostream with sync_with_stdio(false): 31.815 seconds