vector.at(i)
和vector[i]
之间的区别是什么?
vector<int> myVector(6);
myVector.at(5) = 5;
OR
myVector[5] = 5;
我知道两者都会产生相同的结果,但不知何故,运算符[]
更快。另外,我读了关于向量大小(边界)的at
检查并返回越界错误,而[]
没有。
但是我看到了如果尝试分配:
myVector[8] = 1;
我在调试模式下遇到类似超出范围的错误。
那么at
的含义是什么?为什么它在STL中?
答案 0 :(得分:5)
operator []
, std::vector
将返回对内存区域的引用,无论它是否为向量分配。访问未分配的内存区域是未定义的行为,而at
将在任何发生之前抛出异常。正如@JoachimPileborg在评论中所说,operator []
的未指明行为包括抛出异常。