void test01()
{
vector<int> v;
for(int i=0; i<5; i++){
for(int j=i; j<5; j++)
{
v.push_back(i+j);
}
}
for(vector<int>::iterator it=v.begin();it!=v.end();it++)
{
cout << *it << endl;
}
auto smallest = std::max_element(v.begin(), v.end());
cout << "min element is " << *smallest<< " at position " <<std::distance(v.begin(), smallest) << endl;
}
auto类型编译通过C++11标准
void f(vector<int> &v)
{
v[5]; // A
v.at[5]; // B
}
如果v非空,A行和B行没有任何区别。如果v为空,B行会抛出std::out_of_range异常,A行的行为未定义。
c++标准不要求vector::operator[]进行下标越界检查,原因是为了效率,总是强制下标越界检查会增加程序的性能开销。设计vector是用来代替内置数组的,所以效率问题也应该考虑。不过使用operator[]就要自己承担越界风险了。
如果需要下标越界检查,请使用at。但是请注意,这时候的性能也是响应的会受影响,因为越界检查增加了性能的开销。