I am confused why the two print statements give different output. Attaching the code snippet below. Any help would be appreciated. Thank You.
stack<int>st1;
stack<int>st2;
st2.push(222);
cout<<"st1 size:"<<st1.size()<<endl;
cout<<"st2 size:"<<st2.size()<<endl;
int a=st1.size();
int b=st2.size();
cout<<"difference:"<<a-b<<endl;
cout<<"difference:"<<(st1.size()-st2.size())<<endl; //why this is giving different ans
/* output:
st1 size:0
st2 size:1
difference:-1
difference:4294967295
*/
Take a look at the return type of the member function size
. I bet that you'll find it is an unsigned type.
What happens when you calculate 0u - 1 with unsigned integers? The result cannot be -1 because that number isn't representable by an unsigned type. The result will be a positive number that is congruent with -1 modulo the number of representable values. Which is also the largest value representable by that unsigned type.