我经常发现人们使用数组括号[]和正常的 vector 函数.at()。为什么有两种单独的方法?两者的利弊是什么?我知道.at()更安全,但是在任何情况下都无法使用.at()?如果.at()总是更安全,为什么还要使用数组括号[]。
我四处搜寻,但找不到类似的问题。如果已经存在类似问题,请转发给我,我将删除此问题。
最佳答案
std::vector::at()
通过抛出 std::out_of_range
异常来防止访问数组元素,这与[]
运算符不同,std::vector
运算符不会在访问 vector 边界时发出警告或抛出异常。std::vector
被视为c99中的可变长度数组(VLA)的C++替换/构造。为了通过[]
轻松替换c样式的数组,需要 vector 提供与数组相似的接口(interface),因此 vector 提供了std::vector
运算符来访问其元素。同时,C++标准委员会可能还认为有必要为c样式数组上的std::vector::at()
提供额外的安全性,因此,他们还提供了提供此格式的std::vector::at()
方法。
自然地,[]
方法会在对 vector 进行解引用之前检查 vector 的大小,这比std::vector
访问元素的开销小(在大多数情况下可以忽略不计),因此ojit_code为您提供了安全或更快的选择以牺牲自己的安全性为代价。
关于c++ - 在C++中访问 vector 的元素?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8221702/