2013-07-12 91 views
2

vector.at(i)vector[i]有什么区别?C++ STL访问向量元素

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

OR

myVector[5] = 5; 

我知道,这两个产生相同的结果,但不知何故操作[]更快。我还读了at检查矢量大小(边界)并返回出界错误,而[]没有。

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

myVector[8] = 1; 

我得到一个类似超出范围错误的调试模式。

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

+1

可能是在调试模式下,特定的矢量实现甚至对'[]'运算符也有范围检查。你真的必须检查你正在使用的库的文档。 –

+1

任何参考资料都应该告诉你。如果您不相信有效性,请查看标准。 – chris

回答

5

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

+0

为了补充说明,*未指定的行为* **包括**抛出异常。 –

+0

谢谢,所以在()处连接了一个特定的异常。我想我有我的平台支持容器“vector”的调试实现。我在整个过程中进行调试,并在开发过程中查看错误原因。在分配之前,它也绑定检查运算符“[]”。其实,是不是很多平台已经这样做?为什么即使有人选择“at”,记住它的运行速度较慢? – baci

+1

@C.CanberkBacı,因为即使在发布模式下,如果超出范围,它也能保证会抛出异常。根据你的程序是什么样,这可能是好的或坏的。 – chris