首页 > 其他分享 >关于读入速度的小实验

关于读入速度的小实验

时间:2023-09-08 10:56:19浏览次数:41  
标签:测试 int ll cin long 实验 读入 速度 getchar

2023-08-29 11:13:16

有人跟我说去同步的 cin 比普通快读要快,我觉得有点邪门,所以做了一个小比较,然后果不其然又发现了奇怪的事情。

用以下代码测试:

注:输入数据 \(n=5\times 10^7,|w|\le 2^{64}-1\),由于是在学校机房老年机跑,所以测试结果可能与在其他地方测试相差较大,但是基于同一台机器的测试性能,在同一个环境跑的时间也能从某种程度上看出相对速度。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll read(){
    ll x=0,f=1;char c=getchar();
    for(;!isdigit(c);c=getchar())if(c=='-')f=-1;
    for(;isdigit(c);c=getchar())x=(x<<3)+(x<<1)+(c^48);
    return x*f;
}
ll w,n;
int main(){
    freopen("test_fast_read.in","r",stdin);
    int coloc1=clock();
    scanf("%lld",&n);
    for(int i=1;i<=n;i++)scanf("%lld",&w);
    cout<<"scanf时间:"<<clock()-coloc1<<endl;
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
    freopen("test_fast_read.in","r",stdin);
    coloc1=clock();
    cin>>n;
    for(int i=1;i<=n;i++)cin>>w;
    cout<<"去同步cin时间:"<<clock()-coloc1<<endl;
    freopen("test_fast_read.in","r",stdin);
    coloc1=clock();
    n=read();
    for(int i=1;i<=n;i++)w=read();
    cout<<"快读时间:"<<clock()-coloc1<<endl;
}

输出:

scanf时间:55668
去同步cin时间:27656
快读时间:13613

经过多测测试,结果基本一致。

但是如果用这个代码测试:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll read(){
    ll x=0,f=1;char c=getchar();
    for(;!isdigit(c);c=getchar())if(c=='-')f=-1;
    for(;isdigit(c);c=getchar())x=(x<<3)+(x<<1)+(c^48);
    return x*f;
}
ll w,n;
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
    freopen("test_fast_read.in","r",stdin);
    int coloc1=clock();
    cin>>n;
    for(int i=1;i<=n;i++)cin>>w;
    cout<<"去同步cin时间:"<<clock()-coloc1<<endl;
    freopen("test_fast_read.in","r",stdin);
    coloc1=clock();
    n=read();
    for(int i=1;i<=n;i++)w=read();
    cout<<"快读时间:"<<clock()-coloc1<<endl;
}

输出:

去同步cin时间:61292
快读时间:13686

好奇为什么相差这么大。(多测测试发现结果接近)

然后我就让 cin 自己跑,代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll w,n;
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
    freopen("test_fast_read.in","r",stdin);
    int coloc1=clock();
    cin>>n;
    for(int i=1;i<=n;i++)cin>>w;
    cout<<"去同步cin时间:"<<clock()-coloc1<<endl;
}

输出结果仍然为:

去同步cin时间:60591

要不输出出来看看?

与输入文件完全一致!!!!

什么情况,加了个 scanf 就给它加速了???

离谱,不理解,我甚至人工计时,发现结果是一样的,为什么又有这么邪门的事情发生。

希望有大佬解答。

end writing 2023.8.29 11:12

标签:测试,int,ll,cin,long,实验,读入,速度,getchar
From: https://www.cnblogs.com/NBest/p/17686990.html

相关文章

  • Rust项目使用Dockerfile构建镜像 访问crates.io下载速度慢解决
    在$CARGO_HOME/config文件添加国内的镜像源下面的镜像源来自:https://rsproxy.cn/FROMrust:1.72asbuilderWORKDIR/usr/srcCOPY..RUNecho"[source.crates-io]\n\replace-with='rsproxy-sparse'\n\[source.rsproxy]\n\registry=\"https://rs......
  • 【ROS2机器人入门到实战】电机控制之正反转实验
    3.电机控制之正反转实验写在前面当前平台文章汇总地址:ROS2机器人从入门到实战获取完整教程及配套资料代码,请关注公众号<鱼香ROS>获取教程配套机器人开发平台:两驱版|四驱版为方便交流,搭建了机器人技术问答社区:地址fishros.org.cn你好,我是小鱼。前面说到通过控制对应的IO电平变换即......
  • 【ROS2机器人入门到实战】I2C通信实验-点亮OLED
    6.I2C通信实验-点亮OLED写在前面当前平台文章汇总地址:ROS2机器人从入门到实战获取完整教程及配套资料代码,请关注公众号<鱼香ROS>获取教程配套机器人开发平台:两驱版|四驱版为方便交流,搭建了机器人技术问答社区:地址fishros.org.cn你好,我是爱吃鱼香ROS的小鱼。本节我们就尝试直接使......
  • 【ROS2机器人入门到实战】脉冲测量与校准实验
    8.脉冲测量与校准实验写在前面当前平台文章汇总地址:ROS2机器人从入门到实战获取完整教程及配套资料代码,请关注公众号<鱼香ROS>获取教程配套机器人开发平台:两驱版|四驱版为方便交流,搭建了机器人技术问答社区:地址fishros.org.cn你好,我是小鱼,有了上节的理论,这一节我们编写代码来尝试......
  • 【ROS2机器人入门到实战】目标速度控制-运动学逆解
    13.目标速度控制-运动学逆解写在前面当前平台文章汇总地址:ROS2机器人从入门到实战获取完整教程及配套资料代码,请关注公众号<鱼香ROS>获取教程配套机器人开发平台:两驱版|四驱版为方便交流,搭建了机器人技术问答社区:地址fishros.org.cn你好,我是小鱼。上一节我们推导并在代码中实现了......
  • 一套成熟的实验室信息管理系统源码,集前处理、检验、报告、质控、统计分析、两癌等模块
    一套成熟的实验室信息管理系统,集前处理、检验、报告、质控、统计分析、两癌等模块为一体的实验室信息管理系统。在整个检验过程中实时对检验结果监控、评估、分析、统计并对操作规程进行严格规范。它的开发和应用将加快检验科管理的统一化、网络化、标准化的进程。技术架构:ASP.NET......
  • 测试type和isinstance两个函数,那个速度更加的快
    一、解决方案通过装饰器实现二、相关知识点isinstance()函数1.isinstance()函数是python中的一个内置函数,作用:判断一个函数是否是一个已知类型,类似type()。2.语法:isinstance(object,classinfo)参数:object:实例对象。classinfo:可以是直接或......
  • 火山引擎 DataTester 首推A/B实验经验库,帮助企业高效优化实验设计能力
    更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 近日,火山引擎DataTester推出了重要功能——A/B实验经验库。基于在字节跳动已完成150万余次A/B实验的经验,DataTester首创了A/B实验经验库功能。该功能可帮助业务人员将历史的A/B实验经......
  • 火山引擎 DataTester 首推A/B实验经验库,帮助企业高效优化实验设计能力
    更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群近日,火山引擎DataTester推出了重要功能——A/B实验经验库。基于在字节跳动已完成150万余次A/B实验的经验,DataTester首创了A/B实验经验库功能。该功能可帮助业务人员将历史的A/B实验经验沉淀,并......
  • iTOP-RK3568开发板内核模块实验-设置交叉编译器
    在上一章节我们编写了最简单的helloworld驱动程序。有了驱动程序以后,要如何编译并使用驱动呢。编译驱动有俩种方法,分别是将驱动编译成内核和将驱动编译成内核模块。我们先来学习如何将驱动编译成内核模块、4.1设置交叉编译器1下载网盘资料下的交叉编译器,网盘路径为:“XXX”,将下......