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

时间:2015-08-08 04:19:48

标签: c++ integer size unsigned signed

我在代码中对有符号和无符号整数表达式进行了比较:

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

如何修复此警告?

3 个答案:

答案 0 :(得分:3)

std::vector::size返回size_type的值,即Unsigned integral type (usually std::size_t)

您的循环计数变量属于long类型,这是签名类型。因此,在循环条件中,您要比较有符号和无符号类型。

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

答案 1 :(得分:2)

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)

答案 2 :(得分:0)

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

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

只需使用它。

相关问题