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

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

我在我的代码中比较有符号和无符号整数表达式:

    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++)

如何修复此警告?

vector::size returns a size_type 这是一个无符号整数值。

您可以通过以下两种方式之一解决此问题:

  1. 在您的 for 循环中使用无符号迭代器:for(auto i = 0U; i < row.size(); ++i)
  2. vector::size 的 return 转换为有符号整数:for(auto i = 0; i < static_cast<int>(row.size()); ++i)

std::vector::size returns a value of size_type, which is Unsigned integral type (usually std::size_t).

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

解决方案很简单:使用 std::vector<long int>::size_type(甚至 size_t)代替 long

C++ 有一个叫做 range-based for loop 的东西,它可以减轻你处理索引变量的负担。它还解决了您的不匹配签名问题:

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

随便用。