这段代码有什么问题?这道题的答案应该是24吧?
What is wrong with this code? The answer should be 24 for this question right?
这段代码有什么问题?这道题的答案应该是24吧?
int t;
vector<int>arr={24,434};
for(int i=arr.size()-1;i>=(arr.size()-2);i--)
{
t=i;
}
cout<<arr[t];
你的循环永远不会结束。因为无符号整数永远不可能是 -1。
相反,试试这个聪明的方法:
#include <iostream>
#include <vector>
int main( )
{
std::vector<int> arr { 24, 434 };
std::size_t t { };
for ( std::size_t idx { arr.size( ) }; idx--; )
{
t = idx;
}
std::cout << arr[ t ];
}
输出:
24
如你所见,循环头没有更新部分,条件部分也执行递减的任务。
这个循环
for(int i=arr.size()-1;i>=(arr.size()-2);i--)
是一个无限循环。
当 i 等于 0 时,由于循环的第三个表达式,它会递减并等于 -1。
然后在这种情况下
i>=(arr.size()-2)
因为操作数 arr.size()-2
的无符号整数类型的等级不低于 int 类型对象的等级,那么由于通常的算术转换,表达式 i 被转换为无符号整数类型对应表达式的类型arr.size()-2
,由于提升了位符号,变成了一个很大的值
就是这个表达式
i>=(arr.size()-2)
左操作数不能为负值
其实就是这个循环
for(int i=arr.size()-1;i>=(arr.size()-2);i--)
没有意义,因为在任何情况下都不能超过一次迭代。
这段代码有什么问题?这道题的答案应该是24吧?
int t;
vector<int>arr={24,434};
for(int i=arr.size()-1;i>=(arr.size()-2);i--)
{
t=i;
}
cout<<arr[t];
你的循环永远不会结束。因为无符号整数永远不可能是 -1。
相反,试试这个聪明的方法:
#include <iostream>
#include <vector>
int main( )
{
std::vector<int> arr { 24, 434 };
std::size_t t { };
for ( std::size_t idx { arr.size( ) }; idx--; )
{
t = idx;
}
std::cout << arr[ t ];
}
输出:
24
如你所见,循环头没有更新部分,条件部分也执行递减的任务。
这个循环
for(int i=arr.size()-1;i>=(arr.size()-2);i--)
是一个无限循环。
当 i 等于 0 时,由于循环的第三个表达式,它会递减并等于 -1。
然后在这种情况下
i>=(arr.size()-2)
因为操作数 arr.size()-2
的无符号整数类型的等级不低于 int 类型对象的等级,那么由于通常的算术转换,表达式 i 被转换为无符号整数类型对应表达式的类型arr.size()-2
,由于提升了位符号,变成了一个很大的值
就是这个表达式
i>=(arr.size()-2)
左操作数不能为负值
其实就是这个循环
for(int i=arr.size()-1;i>=(arr.size()-2);i--)
没有意义,因为在任何情况下都不能超过一次迭代。