使用 stdvector 作为 C 数组
有几种方法可以将 std::vector
用作 C 数组(例如,为了与 C 库兼容)。这是可能的,因为矢量中的元素是连续存储的。
Version >= C++ 11
std::vector<int> v{ 1, 2, 3 };
int* p = v.data();
与基于先前 C++标准的解决方案(见下文)相比,成员函数 .data()
也可以应用于空向量,因为在这种情况下它不会导致未定义的行为。
在 C++ 11 之前,你将获取向量的第一个元素的地址以获取等效指针,如果向量不为空,则这两个方法都是可互换的:
int* p = &v[0]; // combine subscript operator and 0 literal
int* p = &v.front(); // explicitly reference the first element
注意: 如果向量为空,则 v[0]
和 v.front()
未定义且无法使用。
存储向量数据的基址时,请注意许多操作(如 push_back
,resize
等)可以更改向量的数据存储位置,从而使先前的数据指针无效 。例如:
std::vector<int> v;
int* p = v.data();
v.resize(42); // internal memory location changed; value of p is now invalid