vector<int> locationVec; locationVec[i] 和 locationVec.at(i) 的区别
在C++中,vector<int>
是一个动态数组,可以存储整数类型的元素。locationVec
是一个vector<int>
类型的对象。
locationVec.at(i)
和locationVec[i]
都用于访问locationVec
中的元素,但它们有一些区别。
locationVec.at(i)
: 这是一个成员函数,用于返回locationVec
中索引为i
的元素的值。如果索引i
超出了有效范围,即超出了locationVec
的大小,at()
会抛出一个std::out_of_range
异常。这种情况下,可以通过捕获异常来处理超出范围的访问。
try { int value = locationVec.at(i); // 处理value的值 } catch (const std::out_of_range& e) { // 处理访问超出范围的情况 }
locationVec[i]
: 这是一个运算符重载,用于返回locationVec
中索引为i
的元素的值。与at()
不同,如果索引i
超出了有效范围,即超出了locationVec
的大小,operator[]
不会抛出异常,而是产生未定义的行为。这意味着可能会访问到无效的内存位置,导致程序崩溃或产生不可预测的结果。
因此,如果您确定索引值在有效范围内,可以使用locationVec[i]来访问元素,因为它的效率更高。但如果索引值可能超出范围,为了安全起见,建议使用locationVec.at(i)并处理可能的异常。