获取 std::vector 指针的更好方法

kst*_*stn 3 c++ stdvector

由于&v[0]v.data()提供了相同的方式来访问 的底层指针std::vector,我想知道哪种方法在稳定性和可移植性方面是更好的选择?

Far*_*nor 14

来自cppreference

"返回值
指向底层元素存储的指针。对于非空容器,返回的指针比较等于第一个元素的地址"

强调我的

对于非空std::vector,两者v.data()&v[0]比较相等。所以在这一点上,选择哪一个只是一个偏好问题。

但如果我们仔细观察,我们还可以读到:

“返回指向用作元素存储的底层数组的指针。该指针的范围 [data(); data()+size()) 始终是有效范围,即使容器为空(data() 不可取消引用)在这种情况下)。”

强调我的

std::vector::data()这意味着即使向量为空,您也可以使用任何标准算法来处理具有返回指针(及其大小)的迭代器。
获取第一个元素的地址是不可能的,因为通过std::vector::operator[]()空向量的下标运算符访问值是未定义的行为。

知道了这一点,我想说,使用std::vector::data()是最好的选择。