unsigned类型很特殊。事情是这样的,有一次我在写代码的时候发现这样一个错误:
k-=nums.size();
while(k>=nums.size())
{
sort(nums.begin(),nums.end());
for(int i=0;i<k&&i<nums.size();i++)
{
nums[i]=-nums[i];
}
k-=nums.size();
}
这里明明k=-3的时候小于于为正数的num.size()但是却偏偏能够进入循环体!我百思不得其解。但是经过研究发现,vector的size()函数返回的是unsigne类型!那么我们在int和unsigned比较的时候int就会被强转!!!会变成一个很大的数!(可以参考编码规则,这里不过多展开)。
所以:在unsigned和int做运算的时候一定要小心int在负数的情况下被强转!会导致很严重的错误!
unsigned a=0;
int b=-10;
cout<<a+b<<endl;//4294967286