使用 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_backresize 等)可以更改向量的数据存储位置,从而使先前的数据指针无效 。例如:

std::vector<int> v;
int* p = v.data();
v.resize(42);      // internal memory location changed; value of p is now invalid