您的位置:首页 > 其它

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

2015-12-30 13:23 260 查看
void f(vector<int> &v)
{
v[5];    // A
v.at[5];  // B
}


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

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

如果需要下标越界检查,请使用at。但是请注意,这时候的性能也是响应的会受影响,因为越界检查增加了性能的开销。

转载自:http://www.cnblogs.com/zhuyf87/archive/2012/12/06/2805579.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: