一个STL的面试题.

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 ) // 反向遍历array数组
{
 cout  < < array[i]  < < endl;
}
当我运行代码的时候,没有输出 3 2 1,而是输出了一大堆很大的数字,为什么?
于是我修改了代码
for(vector <int>::size_type j=array.size();j>0;j--)
{
    cout  < < "element is "  < <array[j-1] < <endl;
    }
这样就输出了 3 2 1,倒是为什么呢?

////
答案:size_type 是 unsigned int型的,也就是说, i用于大于0,第一种做法会陷入死循环!
当i=0时,再--i,i=0xFFFFFFFF. 引用一个无效的元素,然后程序就崩溃了!
建议用iterator迭代子来操作!

你可能感兴趣的:(vector,面试,iterator)