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

Inf*_*yyy 0 c++

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

vector<int> vectorlist (12);
vectorlist[12]=23;
Run Code Online (Sandbox Code Playgroud)

与:

vector<int> vectorlist (12);
vectorlist.at(12)=23;
Run Code Online (Sandbox Code Playgroud)

lpa*_*app 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"术语来表示向量.起初,我以为你会因为某些原因而拥有列表数据.

所以,给你一个真实世界的例子:当你确定范围内的索引时,你可以使用非边界检查变量,因为这将导致稍快的代码.