2

vector.at(i)和 和有什么不一样vector[i]

vector<int> myVector(6);
myVector.at(5) = 5;

或者

myVector[5] = 5;

我知道两者都产生相同的结果,但不知何故,操作员[]更快。我还阅读了有关at检查矢量大小(边界)并返回超出范围错误的信息,而[]没有。

但是我看到如果尝试分配:

myVector[8] = 1;

我在调试模式下遇到类似的超出范围错误。

那么是什么意思at呢?为什么它在 STL 中?

4

1 回答 1

5

operator []forstd::vector将返回对内存区域的引用,无论它是否分配给向量。访问未分配的内存区域是未定义的行为,而at在任何情况发生之前都会引发异常。正如@JoachimPileborg 在评论中所说,未指定的行为operator []包括抛出异常。

于 2013-07-12T22:06:34.670 回答