将值从向量分配给动态数组(C ++)

时间:2016-09-01 02:24:44

标签: c++ arrays vector dynamic

我有一个名为lineVertices的线的顶点向量,我将传递此数据以绘制OpenGL形状,因此这个向量必须是数组的形式,我假设。我尝试过以下代码:

float* lineArray = new float[lineVertices.size()]();

for (unsigned i = 0; i < lineVertices.size(); i++) {
    lineArray[i] = lineVertices.at(i);
}

但是,似乎向量的每个元素只被分配给数组的第一个元素。即使lineArray标识符是指向第一个元素的指针,是否有另一种方法来访问动态数组的不同元素?

如果有帮助,我在调试时会说lineArray的大小始终为1,尽管lineVertices'大小明显大于1。

我也尝试过以下代码,但这也行不通。

float* lineArray = &lineVertices[0];

感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

您可以将std::vector直接传递给OpenGL函数,并获取指向数组的指针。只需使用::data()成员函数即可。例如:

std::vector<float> vec = ...;
glVertex2fv(vec.data()); // only uses the first two elements
像这样的OpenGL函数接受一个或多个元素的指针。这不必是使用new创建的原始数组;它只需要是一个连续元素列表的指针。使用vector.data()获取指向std::vector内容的指针(第一个元素)。

如果你真的想用手动内存管理创建一个新数组,你可以这样做(与你发布的代码效果相同):

float* arr = new float[vec.size()]; // NO () - not a constructor, but operator new[]
for (size_t i = 0; i < vec.size(); i++) {
    arr[i] = vec[i];
}