gpt4 book ai didi

c++ - 使用 std::ios::sync_with_stdio(false) 可以比 scanf 和 printf 更快?

转载 作者:太空宇宙 更新时间:2023-11-03 10:40:28 29 4
gpt4 key购买 nike

我只知道使用 cin 和 cout 会比 scanf 和 printf 慢。然而,the top answer说使用 std::ios::sync_with_stdio(false) 比 scanf&printf 更快。然而,我做了这个实验,发现不对。是我的错吗?为什么?

什么是使用 cin&cout 比 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()
{
for(int i=1;i<10000000;i++)
printf("%d\n",i);
return 0;
}

使用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;
}

使用 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;
}

使用 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;
}

结果:

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

最佳答案

您每次都使用 std::endl 刷新 std::cout

不要那样做。相反,如果您想匹配 printf 版本的行为,只需输出一个 '\n':

std::cout << ans << '\n';

关于c++ - 使用 std::ios::sync_with_stdio(false) 可以比 scanf 和 printf 更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39309463/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com