关于为什么有时候容器.size乘.size的结果用来比较的时候看起来完全不运行

int maxProduct(vector<string>& words) {
    if (words.size() == 1)
        return 0;
    int ans = INT_MIN;
    for (int i = 0; i < words.size() - 1; ++i) {
        for (int j = i + 1; j < words.size(); ++j) {
            bool flag = false;
            for (char c : words[i]) {
                if (words[j].find(c) != words[j].npos) {
                    flag = true;
                    break;
                }

            }
            words[i].size();
            bool c = flase;
            int a = words[i].size(), b = words[j].size();
            c = (words[i].size() * words[j].size() )> ans;		//1
            if (!flag&&a*b > ans)								//2
                ans = words[i].size() * words[j].size();		//3
        }
    }
    return ans;
}
void main() {
    vector<string> a{ "abcw","baz","foo","bar","xtfn","abcdef" };
    int ans = maxProduct(a);
}

如上代码,c一开始被定义为flase,在i=0,j=1的时候,1处的c按我们的思想应该是变成true的,但是在运行到的时候,c不会改变,看起来就跟1处的比较完全没发生一样,这其实是因为,std容器的.size()函数返回的是unsigned int类型,而ans是int类型,在16位模式下ans=0x80000000,两个size的乘积结果为0x0000000c,于是我们用unsigned int类型和int类型进行比较的时候,会自动把int变成unsigned int,所以结果肯定是false;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值