在这两种方法之间向向量插入值有什么不同:
vector<int> vectorlist (12);
vectorlist[12]=23;
对战:
vector<int> vectorlist (12);
vectorlist.at(12)=23;
答案 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异常来通知请求的位置是否超出范围。