C++ 使用std :: vector作为C数组

示例

有几种方法可以将astd::vector用作C数组(例如,与C库兼容)。这是可能的,因为向量中的元素是连续存储的。

C ++ 11
std::vector<int> v{ 1, 2, 3 };

int* p = v.data();

与基于以前的C ++标准的解决方案(请参阅下文)相比,成员函数还可以应用于空向量,因为在这种情况下它不会引起未定义的行为。.data()

在C ++ 11之前,您将使用向量的第一个元素的地址来获取等效的指针,如果向量不为空,则这两种方法可以互换:

int* p = &v[0];      // 合并下标运算符和0文字

int* p = &v.front(); // 明确引用第一个元素

注意:如果向量为空,v[0]并且未定义并且不能使用。v.front()

当存储载体的数据的基地址,请注意,许多操作(如push_back,resize等)可改变载体的数据存储单元,从而无效先前的数据的指针。例如:

std::vector<int> v;

int* p = v.data();

v.resize(42);      //内部存储器位置已更改;p的值现在无效

           

以上是 C++ 使用std :: vector作为C数组 的全部内容, 来源链接: utcz.com/z/343152.html

回到顶部