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。

相关文章:

  • 2022-12-23
  • 2021-12-25
  • 2022-12-23
  • 2021-12-11
  • 2021-12-10
  • 2022-12-23
  • 2022-12-23
  • 2021-07-20
猜你喜欢
  • 2022-12-23
  • 2021-09-25
  • 2021-09-14
  • 2021-11-19
相关资源
相似解决方案