vector at()和下标访问哪个好?

vector 是可以直接用下标进行访问的一类容器

vector <int> A;
A.push_back(1);
cout<<A[0];

输出:1


但是,有些资料上说vector 最好用at() 进行访问,这是为什么呢?

这是因为at()有对元素是否越界进行判断,如果越界,马上抛出异常 out_of_range
(但是,这个异常是跟踪进去调试的时候才会出现的)
在这里插入图片描述
如果在执行的时候报错的话是这样的:在这里插入图片描述
很“ 蛋疼 ”,这个信息什么意思??一头雾水。。。。。。

下面再看看下标访问越界的情况,看下图:
在这里插入图片描述
很明确的告诉我们vector 越界了!这个报错多友好呐~

不过用下标访问确实也有不好的地方,下面给出解释:
如果用下标访问的话,它是不会检查是否越界的,一路莽下去,直到出错了才停止(当初我试着跟踪进去,走了几分钟都还没报错,而at()很快就报错了)。
在这里,不进行检查是为了提高 vector 容器的效率。

在 vec 非空的情况下,即使下标越界,也有可能对应的内存是可读写的,至于读到的是什么内容,或者写到什么地方,就是随机事件了。

上文引用于:https://blog.youkuaiyun.com/luansxx/article/details/10194171
(后来查到的资料,恍然大悟为什么我能跟踪进去那么久)呜~~~~(>_<)~~~~

综上:我还是觉得在写代码的时候还是可以继续用下标访问,因为比较好知道出错的原因。

个人拙见,如果有错,感谢指出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值