警告:有符号和无符号整数表达式之间的比较..如何解决?
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
这是一个无符号整数值。
您可以通过以下两种方式之一解决此问题:
- 在您的
for
循环中使用无符号迭代器:for(auto i = 0U; i < row.size(); ++i)
- 将
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);
随便用。
我在我的代码中比较有符号和无符号整数表达式:
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
这是一个无符号整数值。
您可以通过以下两种方式之一解决此问题:
- 在您的
for
循环中使用无符号迭代器:for(auto i = 0U; i < row.size(); ++i)
- 将
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);
随便用。