std :: vector .at()函数到底做了什么?

时间:2013-08-17 08:51:57

标签: c++

在这两种方法之间向向量插入值有什么不同:

vector<int> vectorlist (12);
vectorlist[12]=23;

对战:

vector<int> vectorlist (12);
vectorlist.at(12)=23;

2 个答案:

答案 0 :(得分:5)

.at(...)正在进行绑定检查,同时[]运算符没有,即超出范围。

请参阅此处的文档:

http://www.cplusplus.com/reference/vector/vector/at/

“该函数自动检查n是否在向量中的有效元素的范围内,如果不是,则抛出out_of_range异常(即,如果n大于或等于其大小)。这与成员运算符形成对比[],不检查边界。“

或:

http://www.cplusplus.com/reference/vector/vector/operator[]/

“类似的成员函数vector :: at与此操作符函数具有相同的行为,除了对vector :: at进行绑定检查,并通过抛出out_of_range异常来通知请求的位置是否超出范围。”

稍微偏离主题,但你不应该对矢量使用“vectorlist”术语。起初,我认为你出于某种原因会有列表数据。

所以,为了给你一个真实世界的例子:当你确定范围内的索引时,可以使用非边界检查变量,因为这样会产生稍微快一点的代码。

答案 1 :(得分:0)

根据C ++标准:

  

类似的成员函数vector :: at具有与此operator []函数相同的行为,除了对vector :: at进行绑定检查,并通过抛出out_of_range异常来通知请求的位置是否超出范围。