2015-08-08 165 views
0

我得到在我的代码符号和无符号整数表达式之间的比较:警告:有符号和无符号整数表达式之间的比较..如何解决它?

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

我怎样才能解决这个警告呢?

+1

万一有*不*感觉就像计数。 'pro = pro * pow(row [i],m);'是第27行。请用表示行号的注释标记有问题的行,例如'// 27行HERE'。谢谢。 – WhozCraig

+4

我敢打赌,在**真正的代码**,对于(长我= 0;我

+0

@DrewDormann我会支持你的赌注,不是你需要它。 – WhozCraig

回答

3

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

您的循环计数变量的类型为long这是签署的类型。因此,在循环条件下,您正在比较已签名和未签名类型。

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

+1

或'decltype(row):: size_type'上有大量重复项,因此如果“行”的元素类型发生更改,则不必更改它。 – emlai

2

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

您可以修复的两种方式这一个:

  1. 在使用一个无符号的迭代您for -loop:for(auto i = 0U; i < row.size(); ++i)
  2. 科协vector::size返回一个符号整数:for(auto i = 0; i < static_cast<int>(row.size()); ++i)
0

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

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

只要使用它。

相关问题