警告:有符号和无符号整数表达式之间的比较.如何解决它
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++)
如何修复此警告?
std::vector::size
返回值size_type
,它是无符号积分类型(通常为std::size_t
(。
循环计数变量的类型为long
,它是有符号类型。因此,在循环条件下,您将比较有符号类型和无符号类型。
解决方案很简单:使用std::vector<long int>::size_type
(甚至可能使用size_t
(而不是long
。
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)
C++有一个称为基于范围的for
循环的东西,它减轻了处理索引变量的负担。它还解决了不匹配的签名问题:
for(long r : row)
pro = pro * pow(r,m);
使用它即可。
相关文章:
- 运行同一解决方案的另一个项目的项目
- Project Euler问题4的错误解决方案
- Ardunio UNO解决了多个重叠的定时器循环
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 两个文件使用彼此的功能-如何解决
- 计算每个节点的树高,帮助我解释这个代码解决方案
- 如何解决"invalid conversion from 'char' to 'const char*'"
- 在java中解决这段代码时面临循环中的问题
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- 难以理解某些人解决IOI问题的源代码
- visual c++,如何获取解决方案目录中的代码
- 如何解决错误:SCIP C++中的 SCIP 阶段无效 <10>
- 节俭并发:未解决的外部问题
- IpOpt拒绝解决不受约束的问题
- 如何解决这个超硬恒星的创造问题
- 循环无限运行C++解决骑士之旅问题
- 有没有办法在远程设备上打开和编辑visual Studio 2017解决方案
- C++Matching Brackets 2解决方案不起作用
- 在 ubuntu3 上C++ goto 定义有什么解决方案吗16.04?
- 为什么这段代码不起作用,我该如何解决?