搜索
热搜: NOIP OIer 神牛
查看: 364|回复: 1

C++输入输出效率优化

[复制链接]

35

主题

54

帖子

4530

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4530
发表于 2023-8-6 23:24:45 | 显示全部楼层 |阅读模式
C++编程中如果输入或输出信息较多,使用cin/cout会导致TLE超时,如何提升输入输出效率,以AC相关问题。
一、换行使用换行符‘\n’,不要使用endl
endl除了换行还会刷新缓冲区,导致性能比较低,如果输出打印比较多,则会导致时间超时。‘\n’只换行,其不会刷新缓存区,所以效率高。
二、使用scanf/printf替代cin/cout
cin,cout效率低,是因为先把要输出的东西存入缓冲区,再输出,导致效率降低。
三、cin/cout优化
在程序开始处增加优化:
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
ios::sync_with_stdio(false)
“是否兼容 stdio”的开关,C++ 为了兼容 C,保证程序在使用了 printf 和 std::cout 的时候不发生混乱,将输出流绑到了一起。这样配置相当于进行解除绑定操作,配置后要注意不能同时使用 std::cin/std::cout 和 scanf/printf。
tie(0)
在默认的情况下cin绑定的是cout,每次执行 << 操作符的时候都要调用flush,这样会增加IO负担。可以通过tie(0)(0表示nullptr)来解除cin与cout的绑定,进一步加快执行效率。
四、快读
在数据量较大的情况下,即使使用 C 语言提供的 scanf 函数也可能超时,此时需要快读函数。快读使用 getchar 获得每一个字符,其效率比 scanf高。
int read(){
    int x = 0, f = 1;
    char c = getchar();
    while(c < '0' || c > '9'){
       if(c == '-'){
           f = -1;
       }
       c = getchar();
    }
    while(c >= '0' && c <= '9'){
       x = x*10+c-'0';
       c = getchar();
    }
    return x*f;
}

回复

使用道具 举报

主题

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2024-7-7 19:19:47 | 显示全部楼层
本帖最后由 红小豆 于 2024-7-7 19:25 编辑

我觉得裸在main函数内的用cin/cout,在循环内的用scanf/printf
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

津ICP备19006949号-1 | 津公网安备12010102000465号

快速回复 返回顶部 返回列表