Usar std :: ios :: sync_with_stdio (false) puede ser más rápido que scanf e printf?
Solo sé que usar cin y cout será más lento que scanf e printf. Sin embargo,la respuesta superior dice que usar std :: ios :: sync_with_stdio (false) puede ser más rápido que scanf & printf. Sin embargo, hice este experimento y descubrí que no estaba bien. ¿Es mi culpa? ¿Por qué?
¿Cuál es un código correcto para usar cin & cout más rápido que scanf & printf, incluida la lectura de archivos? Gracias.
Aquí está mi código:
Generando datos
#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;
}
Usando scanf y 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;
}
Uso de 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;
}
Usando std :: ios :: sync_with_stdio (falso)
#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;
}
Resultado:
scanf version: 4.918 seconds
iostream version: 51.266 seconds
iostream with sync_with_stdio(false): 31.815 seconds