C ++ STL访问向量元素

时间:2013-07-12 22:03:39

标签: c++ vector stl std

vector.at(i)vector[i]之间的区别是什么?

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

OR

myVector[5] = 5;

我知道两者都会产生相同的结果,但不知何故,运算符[]更快。另外,我读了关于向量大小(边界)的at检查并返回越界错误,而[]没有。

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

myVector[8] = 1;

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

那么at的含义是什么?为什么它在STL中?

1 个答案:

答案 0 :(得分:5)

对于operator []

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