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

void f(vector &v)

{

 v[0];    // A

 v.at[0];  // B

}

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

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言: 详细介绍: List:元素有放入顺序,元素可重复Map:元素按键值对存储,无放入顺序Set:元素无放入顺序...
    YBshone阅读 12,794评论 0 17
  • 接着上节 mutex,本节主要介绍atomic的内容,练习代码地址。本文参考http://www.cplusplu...
    jorion阅读 73,949评论 1 14
  • 接着上节 condition_varible ,本节主要介绍future的内容,练习代码地址。本文参考http:/...
    jorion阅读 14,982评论 1 5
  • A 钟思勉看着电脑屏幕,仿佛入定了一般,久久没有动弹。 本周“亚洲金曲排行榜”方才发布,钟思勉创作的曲子再一次没有...
    保小罗阅读 3,733评论 4 16
  • 我身边有这样一群女孩,她们长相漂亮,从来不缺乏爱慕者,但她们却一直选择单身。 很多朋友不能理解,拥有那么好的自身条...
    霸王有约阅读 1,573评论 0 0