警告:有符号和无符号整数表达式之间的比较.如何解决它

warning: comparison between signed and unsigned integer expressions..how to solve it?

本文关键字:何解决 解决 比较 符号 无符号整数 之间 表达式 警告      更新时间:2023-10-16

我在代码中得到了有符号和无符号整数表达式之间的比较:

    vector<long int> row;
    long n,m;
    long int pro=1;
    cin>>n;
    for(long i=0;i<n;i++)
    {
        long int temp;
        for(long j=0;j<n;j++)
        {
            cin >> temp;
            row.push_back(temp);
        }
    }
    cin >> m;
    for(long i=0;i<row.size();i++)
        pro = pro * pow(row[i],m);
    long int mod = 1000000007;
    cout<< (long int)pro%mod;

在线:for(long i=0;i<row.size();i++)

如何修复此警告?

std::vector::size返回值size_type,它是无符号积分类型(通常为std::size_t(。

循环计数变量的类型为long,它是有符号类型。因此,在循环条件下,您将比较有符号类型和无符号类型。

解决方案很简单:使用std::vector<long int>::size_type(甚至可能使用size_t(而不是long

vector::size返回一个size_type,它是一个无符号整数值。

你可以通过以下两种方式来解决这个问题:

  1. for循环中使用无符号迭代器:for(auto i = 0U; i < row.size(); ++i)
  2. vector::size的返回值强制转换为带符号整数:for(auto i = 0; i < static_cast<int>(row.size()); ++i)

C++有一个称为基于范围的for循环的东西,它减轻了处理索引变量的负担。它还解决了不匹配的签名问题:

for(long r : row)
    pro = pro * pow(r,m);

使用它即可。