C++ 使用std :: vector作为C数组
示例
有几种方法可以将astd::vector用作C数组(例如,与C库兼容)。这是可能的,因为向量中的元素是连续存储的。
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的值现在无效