size()的返回值是unsigned类型的,所以不能和负数比较大小。请看下面的程序。
#include<iostream> using namespace std; int main() { unsigned x; x=2; if (-1>x) cout<<-1; else cout<<1; }输出的结果是-1。 由此可见,unsigned类型不能和负数比较大小。
再看下面的程序。
#include<iostream> #include<vector> using namespace std; vector<int> a; int main() { a.push_back(1); int h=-1; cout<<"h="<<h<<' '<<"a.size()="<<a.size()<<'\n'; while (h<=a.size()) { cout<<"已进入循环 "; h++; } }输出的结果为
h=-1 a.size()=1然后再看下面的程序
#include<iostream> #include<vector> using namespace std; vector<int> a; int main() { a.push_back(1); int h=-1; cout<<"h="<<h<<' '<<"a.size()="<<a.size()<<'\n'; while (h<=(int)(a.size())) { cout<<"已进入循环 "; h++; } }把a.size()强制转换为int类型,输出结果为
h=-1 a.size()=1 已进入循环 已进入循环 已进入循环这说明,size()函数的返回类型为unsigned。
使用vector或queue等时,尤其需要注意用size()函数时,不能和负数比较大小,不然会发生一些很恶心的错误。这是一个来自调试了一下午程序的人的忠告。
