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
相关文章推荐
- 移动开源音视频软件
- 1012. 数字分类 (20)
- iOS UI-AlertView(警示框)和ActionSheet(选择框、操作表单)
- System.gc与finalize以及Thread对象何时被回收
- 每天学习十分钟6之学习心得
- CentOS 创建SVN 服务器,并且自动同步到WEB 目录
- Java常用工具类总结(一)
- Loadrunner---出现中文乱码怎么解决
- Android 拍照与从相册选取图片时,图片不显示的问题
- KVC/KVO原理详解及编程指南
- iOS沙盒机制
- MSVCP100.dll 丢失的问题
- __declspec(naked)详解
- HDU 1115 Lifting the Stone(计算几何)
- STM32端 UCOII+LWIP问题汇总
- Putty完全使用方法
- [LeetCode]题解(python):078-Subsets
- 万能网卡驱动
- Android:ContentProvider、URI、UriMatcher、ContentUris、ContentResolver、ContentObserver
- Foreground Detection: A Fast Self-tuning Background Subtraction Algorithm