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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage