Bei_Ming468 2023-02-17 15:07 采纳率: 100%
浏览 32
已结题

c/c++的输入输出优化问题

对于这行代码,我只知道是优化cin和cout的速度,速度和scanf,printf差不多,但是同一份代码,我只修改了输入输出,c的时间是717ms,c++只要139ms,内存差不多都是15。
如果是用C++万能头,输入输出用scanf和printf也是要800多ms。
题目是codeforces的1679B.

ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);


```)
```c
#include <stdio.h>
typedef long long ll;
int s[200007],q[200007];
int main()
{
    int n,m,i,j,z = -1,d;
    ll sum = 0;
    scanf("%d%d",&n,&m);
    for(i=1;i<=n;i++)
    {
        scanf("%d",&s[i]);
        sum += s[i];
    }    
    for(i=1;i<=m;i++)
    {
        ll a,b,c;
        scanf("%lld%lld",&a,&b);
        if(a == 1)
        {
            scanf("%lld",&c);
            sum += c - (q[b]>z?s[b]:d);
            s[b] = c;
            q[b] = i;
        }
        else
        {
            d = b;
            z = i;
            sum = (ll)b*n;
        }
        printf("%lld\n",sum);
    }
    return 0;
}

```c++
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+7;
int s[N],q[N];
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int n,m,i,j,z = -1,d;
    ll sum = 0;
    cin >> n >> m;
    for(i=1;i<=n;i++)
    {
        cin >> s[i];
        sum += s[i];
    }    
    for(i=1;i<=m;i++)
    {
        ll a,b,c;
        cin >> a >>b;
        if(a == 1)
        {
            cin>>c;
            sum += c-(q[b]>z?s[b]:d);
            s[b] = c;
            q[b] = i;
        }
        else
        {
            d = b;
            z = i;
            sum = (ll)b*n;
        }
        cout<<sum<<"\n";
    }
    return 0;
}

```

  • 写回答

2条回答 默认 最新

  • CodeBytes 2023-02-17 15:34
    关注

    该回答引用ChatGPT
    在 C++ 中,使用 iostream 库(包括 cin 和 cout)进行标准输入和输出时,由于默认情况下与 C 的 stdio 库不同,会对 stdio 进行同步(sync)操作。这意味着 iostream 库将使用 stdio 的缓冲区,这可能会减缓输入输出速度。因此,将 ios::sync_with_stdio(false); 放在代码的开头可以关闭同步,从而提高 iostream 的速度,但也可能会导致 iostream 和 stdio 之间数据不同步的问题。

    此外,C++ 的 iostream 库本身就比 C 的 stdio 库稍微慢一些。因此,如果程序的输入输出较为频繁,使用 C 的 stdio 库可能比使用 C++ 的 iostream 库更快一些。

    此外,使用 C++ 的万能头(#include <bits/stdc++.h>)也可能会导致程序运行速度变慢,因为这个头文件包含了许多库文件,导致编译器需要处理更多的代码,从而增加编译时间和执行时间。因此,最好只包含需要的库头文件。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月9日
  • 已采纳回答 3月1日
  • 修改了问题 2月17日
  • 创建了问题 2月17日

悬赏问题

  • ¥15 乌班图ip地址配置及远程SSH
  • ¥15 怎么让点阵屏显示静态爱心,用keiluVision5写出让点阵屏显示静态爱心的代码,越快越好
  • ¥15 PSPICE制作一个加法器
  • ¥15 javaweb项目无法正常跳转
  • ¥15 VMBox虚拟机无法访问
  • ¥15 skd显示找不到头文件
  • ¥15 机器视觉中图片中长度与真实长度的关系
  • ¥15 fastreport table 怎么只让每页的最下面和最顶部有横线
  • ¥15 R语言卸载之后无法重装,显示电脑存在下载某些较大二进制文件行为,怎么办
  • ¥15 java 的protected权限 ,问题在注释里