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 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题