You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中读取未知数量n个正整数时哪种cin输入方式速度更快?

C++ 未知数量正整数输入方案速度对比

首先直接给出三种方案的速度排序:getchar 自定义读取 > 关闭同步后的 cin 流式读取 > getline 自行解析字符

现有两种方案的问题分析

  • 第一种cin >> x实现:你当前只设置了cin.tie(NULL),没有关闭cin和C stdio的同步,默认状态下速度很慢。需要补充ios::sync_with_stdio(false)之后才能发挥cin的性能,这种方案不需要你手动处理数字拼接、分隔符跳过逻辑,代码不易出错,适合大多数对性能要求不是极致苛刻的场景。
  • 第二种getline读整行再遍历的实现:存在明显的功能缺陷,你的需求是读取未知数量的正整数,单次getline只能读取一行输入,如果输入有多行就会漏读。同时你需要自行实现字符转整数、分隔符处理逻辑,容易出现边界错误,且getline本身也属于cin的接口,性能上限和第一种方案持平,开发成本反而更高。

getchar方案的优势与正确实现

getchar是C标准库中封装层级最低的字符读取接口,运行开销最小,是三种方案中速度最快的选择,适合对输入性能有极致要求的场景。

正确的使用示例代码如下:

// 自定义快读函数,适配正整数读取需求
int fast_read() {
    int num = 0;
    char ch = getchar();
    // 跳过所有非数字的分隔符(空格、换行、制表符等)
    while (ch < '0' || ch > '9') {
        ch = getchar();
        // 读到输入结束直接返回EOF终止循环
        if (ch == EOF) return EOF;
    }
    // 拼接连续数字为整数
    while (ch >= '0' && ch <= '9') {
        num = num * 10 + (ch - '0');
        ch = getchar();
    }
    return num;
}

// 调用方式
int main() {
    int x;
    while ((x = fast_read()) != EOF) {
        // 处理读取到的正整数x
    }
    return 0;
}

如果需要读取更大范围的正整数,只需要把fast_read函数的返回值和num变量的类型修改为long long即可。

内容的提问来源于stack exchange,提问作者Hiển Nguyễn Minh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 23:27:03