日常小问题(技巧)汇总

本文探讨了C++中cin与scanf的性能差异,指出cin由于与stdin同步导致额外开销,可以通过std::ios::sync_with_stdio(false)禁用同步以提升效率。此外,还讲解了全局变量初始化的重要性,确保程序的稳定运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 scanf 为什么比cin快?

比较合理的解释:默认情况,cin与stdin总是保持同步的,也就是说这两种方法可以混用,而不必担心文件指针混乱,同时cout和stdout也一样,两者混用不会输 出顺序错乱。正因为这个兼容性的特性,导致cin有许多额外的开销,如何禁用这个特性呢?只需一个语句 std::ios::sync_with_stdio(false);,这样就可以取消cin于stdin的同步了,此时的cin就与scanf差不多 了。
————————————————
版权声明:本文为CSDN博主「穆江浩」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u012841718/article/details/53509883

2 全局变量初始化

https://www.cnblogs.com/catch/p/4314256.html

3 #LC8:字符串转换整数

模拟题,有一点,越界处理

class Solution {
public:
    int myAtoi(string s) {
        int n = s.size();
        int sign = 1;
        long long ans = 0;
        int i = 0;
        while(i < n && s[i] == ' ') i++;
        if(i == n) return 0;
        if(s[i] == '-') 
        {
            sign = -1;
            i++;
        }
        else if(s[i] == '+') i++;
        else if(isalpha(s[i]))
            return 0;
        while(i < n && isdigit(s[i]))
        {
            int t = s[i] - '0';
            if(ans > (INT_MAX - t) / 10)//送到右侧判断, 值得学习
                return sign == 1 ? INT_MAX : INT_MIN;
            else 
                ans = ans * 10 + t;;
            i++;
        }
        if(sign == -1)
            ans = 0 - ans;
        return ans;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值