为什么-1不能和vector.size()比较
在使用vector.size()做比较的时候可能会出现如下情况:
vector<int> nums={4,8,10,240};
int len=-1;
if(len<nums.size())
len=nums.size();
cout<<len<<endl;
此时程序的输出是
-1
而不是预想中的
4
这是为什么呢?
查证了一下size()的返回值:
std::vector::size
size_type size() const noexcept;
发现该返回值类型是 size_type ,也就是容器中 typedef 之后的 size_t,而 size_t 的类型是:
std::size_t is commonly used for array indexing and loop counting. Programs that use other types, such as unsigned int, for array indexing may fail on, e.g. 64-bit systems when the index exceeds UINT_MAX or if it relies on 32-bit modular arithmetic.
也就是说size()返回的是一个无符号整数,而补码存储的-1用unsigned int 解读则是4294967295,也就是unsigned int 的最大值,所以代码中的 if 判断永远为假。