我在代码中对有符号和无符号整数表达式进行了比较:
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++)
如何修复此警告?
答案 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
,这是无符号整数值。
您可以通过以下两种方式解决此问题之一:
for
循环中使用无符号迭代器:for(auto i = 0U; i < row.size(); ++i)
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);
只需使用它。