OI 中各种输入方式的速度比较(C++,大量实测数据,附图表)

news/2024/11/15 11:14:11/文章来源:https://www.cnblogs.com/jerrycyx/p/18329120

测试信息

本次共测试了以下几种输入方式的速度:

  • scanf
  • cin
  • 快读
  • 位运算快读
  • fread() + 位运算快读
  • 关闭同步流的 cin
  • 开启 tie 绑定并关闭同步流的 cin

每组测试各输入方式均使用相同数据,为随机生成的 \(1000000\)1E6) 个整数,范围在 \([-(2^{31}-1),2^{31}-1]\)(即 int 范围)。

所用配置为 12th Gen Intel(R) Core(TM) i5-12400 2.50 GHz,操作系统为 Windows 11


所用代码:

数据生成

#include<cstdio>
#include<cstdlib>
#include<ctime>
using namespace std;const int N=1e6;inline int large_rand()
{bool op=rand()&1;long long huge_rand=rand()+(rand()<<15)+(rand()<<30);return op?-(huge_rand%(1ll<<32)):huge_rand%(1ll<<32);
}
int main()
{freopen("input.in","w",stdout);srand(time(NULL));for(int i=1;i<=N;i++)printf("%d ",large_rand());fclose(stdout);freopen("log.txt","a+",stdout);printf("Succeeded generated data.\n");fclose(stdout);return 0;
}

计时等部分

#include<cstdio>
#include<windows.h>
using namespace std;const int N=1e6;int main()
{freopen("input.in","r",stdin);freopen("log.txt","a+",stdout);LARGE_INTEGER StartingTime,EndingTime,ElapsedMicroseconds;LARGE_INTEGER Frequency;QueryPerformanceFrequency(&Frequency);QueryPerformanceCounter(&StartingTime);...QueryPerformanceCounter(&EndingTime);printf("xxx: %.4f ms\n",1000*((double)EndingTime.QuadPart-StartingTime.QuadPart)/Frequency.QuadPart);fclose(stdin);return 0; 
}

scanf

	int x;for(int i=1;i<=N;i++)scanf("%d",&x);

cin

	int x;for(int i=1;i<=N;i++)cin>>x;

快读

int read()
{int x=0,w=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*w;
}
...int x;for(int i=1;i<=N;i++)x=read();

位运算优化快读

int read()
{int x=0,w=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+(ch^'0');ch=getchar();}return x*w;
}
...int x;for(int i=1;i<=N;i++)x=read();

fread() + 位运算优化快读

const int MAXSIZE=1<<20;
char buf[MAXSIZE],*p1,*p2;
#define gc()                                                               \(p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, MAXSIZE, stdin), p1 == p2) \? EOF                                                               \: *p1++)int rd()
{int x=0,f=1;char c=gc();while(!isdigit(c)){if(c=='-') f=-1;c=gc();}while (isdigit(c)) x=(x<<3)+(x<<1)+(c^48),c=gc();return x*f;
}
...int x;for(int i=1;i<=N;i++)x=rd();

关闭同步流的 cin

	std::ios::sync_with_stdio(false);int x;for(int i=1;i<=N;i++)cin>>x;

开启 tie 绑定并关闭同步流的 cin

	std::ios::sync_with_stdio(false);std::cin.tie(nullptr);int x;for(int i=1;i<=N;i++)cin>>x;

测试结果

log.txt 输出信息

#1
Succeeded generated data.
scanf: 425.8919 ms
cin: 1128.8144 ms
read: 204.4151 ms
read+: 208.4703 ms
read++: 35.9450 ms
cin ios: 127.2909 ms
cin tie ios: 129.4965 ms#2
Succeeded generated data.
scanf: 442.5600 ms
cin: 1260.4899 ms
read: 210.9504 ms
read+: 209.6824 ms
read++: 44.4940 ms
cin ios: 127.7128 ms
cin tie ios: 144.6090 ms#3
Succeeded generated data.
scanf: 438.7641 ms
cin: 1166.4752 ms
read: 213.7551 ms
read+: 230.8293 ms
read++: 44.0495 ms
cin ios: 135.8041 ms
cin tie ios: 137.5192 ms

表格统计

表格统计

图表统计

统计表

根据统计,在百万较长整数(大多是九到十位数)的测试数据下,fread()等优化后的超级快读速度极快,快读及位运算优化快读的效率相似,iostie 优化后的 cin 效率较高,scanf 稍慢,裸 cin 的效率极低

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/773259.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

乒乓球比赛计分系统需求流程——最小可用产品

计应222_杜晓瑾_2210502012 乒乓球比赛计分系统需求流程——最小可用产品 作为一名裁判,我希望可以在系统上进行网络计时、记成绩,以便大家可以监督和观看任务 Sprint 1 2 3 4 5 6 7 8 9 10 开通网络计时(1h) 1 0 网络计时(4h) 4 2 1 0 进行网络记成绩(3h…

Easysearch、Elasticsearch、Amazon OpenSearch 快照兼容对比

在当今的数据驱动时代,搜索引擎的快照功能在数据保护和灾难恢复中至关重要。本文将对 Easysearch、Elasticsearch 和 Amazon OpenSearch 的快照兼容性进行比较,分析它们在快照创建、恢复、存储格式和跨平台兼容性等方面的特点,帮助大家更好地理解这些搜索引擎的差异,从而选…

管理项目更高效:顶级进度管理系统大比拼

国内外主流的10款项目进度管理网站对比:PingCode、Worktile、滴答清单(TickTick)、Todoist、NarTick、Teambition、Monday.com、Asana、ClickUp、Trello。在选择合适的项目进度管理工具时,许多项目经理面临着如何找到既能满足团队需求又易于操作的系统的难题。市场上众多的…

05 详细的中断讲解

目录前言一、什么是中断二、如何使用中断1.stm32中断结构1.1 AFIO中断引脚选择1.2 EXTI边缘检测1.3 NVIC优先级配置2.配置stm32的中断1.打开时钟2.配置GPIO口3.配置AFIO控制4.配置EXTI功能5.配置NVIC6.配置完整代码3.书写中断服务函数总结 前言 又鸽了几天的文章,最近在做一个…

VS2022创建C C++ GTEST工程

原因 需要对带代码进行单元测试,选择在Visual studio 中使用GTEST 框架。 实施 创建一个常规的控制台可执行程序。然后使用NUGET安装包 安装GTEST 头文件和动态库,同时安装GTEST ADAPTER。安装可能提示找不到包源,此时需要根据提示配置一下,注意通配符很关键,不要问为甚吗…

攻防世界-简单的图片

攻防世界-简单的图片 1 首先拿到图片是一张非常朴实的图片用010打开发现没什么特别之处因为是png图片猜测是lsb隐写,这里一开始我用的zsteg发现提取不全用Stegsolve打开看看,尝试了半天发现什么特殊信息,最后发现位平面顺序即bit plane order这一选项要选择BGR,得到下图发现…

Logisim-006-2路选择器16位

仓库地址 https://gitee.com/gitliang/logisim-to-cpu

安装系统时没有网络无法完成设置进入系统

按下键盘上的 shift+f10 打开 命令提示符。在命令提示符中输入: oobe\bypassnro 然后按下回车(Enter按键),将重启电脑。根据指引进行设置。进行到下述界面时点击“我没有Internet链接”。然后点击“继续执行受限设置”。根据指引完成设置,进入系统。出处:微软社区问答 h…

工时管理必备:年度最佳软件推荐

国内外主流的10款工时软件对比:PingCode、Worktile、Monday.com、Todoist、GanttPro、TimeCamp、MyBatis、U8+ ERP、金蝶、用友软件。在选择合适的工时软件时,许多企业面临着如何从众多选项中找到最适合自己需求的系统的挑战。这个选择过程往往令人头疼,因为一个不合适的决定…

羽毛球比赛积分系统02

羽毛球比赛积分系统 1、产品愿景目标用户 学校的体育工作人员(老师、教练、裁判),学生和教师选手,赛事组织者,志愿者等羽毛球比赛的参与者。他们的需要或机会简化赛事安排和管理。 提高比赛的公正性和透明度。 实时掌握比赛成绩和排名。 增强赛事互动和参与体验。产品名称…

to do list

数学 图论 数据结构李超线段树dp动态dp字符串manacher语法科技(永远不嫌多)应该没人看吧,那我挂张奇怪的图本文来自博客园,作者:CuFeO4,转载请注明原文链接:https://www.cnblogs.com/hzoi-Cu/p/18328919