由于&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()是最好的选择。
| 归档时间: |
|
| 查看次数: |
252 次 |
| 最近记录: |