首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解Getchar解锁

理解Getchar解锁
EN

Stack Overflow用户
提问于 2015-01-12 10:04:00
回答 1查看 1.2K关注 0票数 1

我是一个有竞争力的编程新手,我发现很多人在提交的几乎每一个文件中都使用下面的代码片段。

代码语言:javascript
复制
#define gc getchar_unlocked
int readint()

{
    int f=0,ret=0;
    char c=gc();
    while(c<'0'||c>'9')
        c=gc();
    while(c>='0'&&c<='9')
    {
        ret=ret*10+c-48;
        c=gc();
    }
    return f?-ret:ret;
}

这段代码能保证快速的I/O吗?在竞争性编程和其他应用程序中使用它的逻辑是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-12 10:26:27

是的,在大多数情况下,这段代码将比标准库实现更高效。它对输入做出了更多的假设,这使得输入更加脆弱,但允许进行更多的优化。这些假设是:数字总是十进制,用单个非数字字符分隔,任何第二个分隔字符都是负数,数字总是小到适合于一个int。在编程竞赛中,这些假设是可以接受的,但在大多数情况下,不应该以其他方式使用。

getchar只是一个从缓冲输入返回单个字符的函数。_unlocked是一个跳过同步并可以更快的版本,但是在多个线程读取输入的情况下会导致不可预测的行为。

通过对自己的代码进行缓冲并避免对每个字符进行库调用,这段代码可能会变得更快。不过,这么做可能不值得。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27899413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档