且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

访问C ++中的向量元素?

更新时间:2023-11-10 08:49:10

如果这样的问题已经存在请转发给我,我将删除此问题。 std :: vector :: at()通过抛出 out_of_bounds 异常不像 [] 运算符,当访问超出向量边界时不会警告或抛出异常。



std :: vector 是/被视为可变长度数组(VLA)的c ++替换/ c99。为了使c-style数组可以很容易地被 std :: vector 替换,需要向量提供一个类似于数组的接口,因此向量提供 [] 运算符。同时,C ++标准委员会也许还需要为c-style数组提供 std :: vector 的额外安全性,因此他们还提供了



自然地, at()

code>方法在解引用之前检查向量的大小,并且在 [] 访问元素时会有一些开销(在大多数使用情况下可能是微不足道的) ,所以 std :: vector 为您提供了安全的选项或更快的选项,自己管理安全。

I often found people use the array brackets [] and a normal vector function .at (). Why are there two separate methods? What are the benefits and disadvantages of both? I know that .at () is safer, but are there any situations where .at () cannot be used? And if .at () is always safer, why ever use array brackets [].

I searched around but couldn't find a similar question. If a questions like this already exists please forward me to it and I will delete this question.

std::vector::at() guards you against accessing array elements out of bounds by throwing an out_of_bounds exception unlike the [] operator which does not warn or throw exceptions when accessing beyond the vector bounds.

std::vector is/was considered as an c++ replacement/construct for Variable Length Arrays(VLA) in c99. In order for c-style arrays to be easily replacable by std::vector it was needed that vectors provide a similar interface as that of an array, hence vector provides [] operator for accessing its elements. At the same time, C++ standards committee perhaps also felt the need for providing additional safety for std::vector over c-style arrays and hence they also provided std::Vector::at() method which provides it.

Naturally, at() method checks for the size of the vector before dereferencing it and that will be a little overhead (perhaps negligible in most use cases) over accessing elements by [], So std::vector provides you both the options to be safe or to be faster at expense of managing the safety yourself.