一个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迭代子来操作!

你可能感兴趣的:(一个STL的面试题.)