问题
vector <int> array;
array.push_back(1);
array.push_back(2);
array.push_back(3);
for(vector<int>::size_type i=array.size()-1;i>=0;i--)
{
cout<<array[i]<<endll;
}
该代码是错误的,for循环是错误的。
正确的应该为
for(vector<int>::size_type i = array.size();i>0;i--)
{
cout<<array[i-1]<<endl;
}
分析
前者通过查看源码发现,在vector的定义中,
typedef A::size_type size_type;
而_A是allocator<_Ty>,所以查看allocator的定义发现,
typedef _SIZT size_type;
而 _SIZT的定义为:
#define _SIZT size_t
typedef unsigned int size_t;
所以size_type是个无符号类型的。而无符号类型的整数永远都大于等于0的。所以前者的for循环没有限制条件,程序一直运行下去,直到程序奔溃。而后者的for循环有限制条件,当i= 0 时程序结束循环。