对于C++程序员,很多公司招聘都要求熟悉掌握STL,因此有关STL的面试题是层出不穷的,比如下面这个。。
#include <iostream>
#include <vector>
using namespace std;
int main()
{
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] << endl;
return 0;
}
这个代码乍一看很正常,应该输出3 2 1的,可是运行结果却是。。
为什么呢,这时候我们可以看看i的定义了,typedef unsigned int vector<int,class allcator<int>>::size_type,说明i是一个unsigned int类型的无符号整数,它的值永远都是大于0的,因而循环结束条件i>=0就永远都不可能为真了,我们作如下修改:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> array;
array.push_back(1);
array.push_back(2);
array.push_back(3);
for(vector<int>::size_type i = array.size(); i > 0; i--)
cout << array[i - 1] << endl;
return 0;
}
此时就可以得到我们想要的结果了。。