vector中v[i]与v.at(i)的区别

void f(vector<int> &v)
{
  v[0];    // A
  v.at[0];  // B
}

如果v非空,A行和B行没有任何区别。如果v为空,B行会抛出std::out_of_range异常,A行的行为未定义。

c++标准不要求vector<T>::operator[]进行下标越界检查,原因是为了效率,总是强制下标越界检查会增加程序的性能开销。设计vector是用来代替内置数组的,所以效率问题也应该考虑。不过使用operator[]就要自己承担越界风险了。

如果需要下标越界检查,请使用at。

posted on 2012-12-06 18:15  zhuyf87  阅读(13270)  评论(0编辑  收藏  举报

导航