What is wrong with this code? The answer should be 24 for this question right?
int t;
vector<int>arr={24,434};
for(int i=arr.size()-1;i>=(arr.size()-2);i--)
{
t=i;
}
cout<<arr[t];
What is wrong with this code? The answer should be 24 for this question right?
int t;
vector<int>arr={24,434};
for(int i=arr.size()-1;i>=(arr.size()-2);i--)
{
t=i;
}
cout<<arr[t];
This loop
for(int i=arr.size()-1;i>=(arr.size()-2);i--)
is an infinite loop.
When i is equal to 0 it is decremented due to the third expression of the loop and becomes equal to -1.
And then in this condition
i>=(arr.size()-2)
as the operand arr.size()-2
has unsigned integer type with the rank not less than the rank of an object of the type int then due to the usual arithmetic conversions the expression i is converted to the unsigned integer type that corresponds to the type of the expression arr.size()-2
and becomes a very big value due to promoting the bit sign.
That is in this expression
i>=(arr.size()-2)
the left operand can not be a negative value.
In fact this loop
for(int i=arr.size()-1;i>=(arr.size()-2);i--)
does not make a sense because in any case there can be no more than one iteration.
Your loop never ends. Because an unsigned integer can never be -1.
Instead, try this smart approach:
#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 ];
}
Output:
24
As you can see, the loop header does not have an update section, and the condition section also performs the task of decrementing.