C/C++ debug(三)

C/C++ debug(一)
C/C++ debug(二)
C/C++ debug(三)
C/C++ debug(四)

return m[key]

对于一个 map 容器,先判断键值是否存在,就直接返回,恰因为不会保错,返回 Value 的默认值,而容易引发逻辑错误。

需首先判断 key 是否存在,可用 find() 判断是否存在该 key:

m.find(key) == m.end();

所以:

assert(m.find(key) != m.end());
return m[key];

if vs else if

  • (1)if、else if:在数学意义上表达的是对样本空间的划分,
  • (2)划分是没有交集的划分,刻画的是泾渭分明的概念。
    换句话说, ABϕ ,是不可以:

    if (A){
    ...
    } else if (B){
    ...
    }

    也即两个有交集的断言是不可以分别放在 if 和 else 里的;

if (A){
...
} else if(B){
...
} else {
...
}

如下的判断逻辑刻画的是如下的空间划分:


这里写图片描述

switch:错误,控制传输跳过的实例化

如下:

while ((key = getchar()) != 'q')
{
    switch (key)
    {
        case 'f':
            string filename;
            cin >> filename;
            break;
        ...
    }
}

便会在 switch 处提示错误:控制传输跳过的实例化,问题出现在 string filename 这一局部变量的位置上,解决方法:

  • (1)使用大括号括起来

    case 'f':
        {
            string filename;
            cin >> filename;
            break;
        }
  • (2)为了维持 case 分支风格的统一,将 case 中的局部变量声明的语句置于 switch 的外部

    string filename;
    while ((key = getchar()) != 'q')
    {
        case 'f':
            cin >> filenmae;
            ...
            break;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五道口纳什

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值