赋值从向量到动态数组(c++)

Assign values from vector to dynamic array (C++)

本文关键字:c++ 数组 动态 向量 赋值      更新时间:2023-10-16

我有一个叫做lineVertices的线的顶点向量,我要传递这个数据来绘制一个OpenGL形状,所以这个向量必须是一个数组的形式,我假设。我尝试了以下代码:

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

然而,似乎vector的每个元素都只被赋值给了数组的第一个元素。即使lineArray标识符是指向第一个元素的指针,是否有另一种方法来访问动态数组的不同元素?

如果它有帮助,当我调试时,它说lineArray的大小总是1,尽管lineVertices'的大小明显大于1。

我也尝试了下面的代码,但这也不起作用。

float* lineArray = &lineVertices[0];

任何帮助都是感激的!

你可以直接将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];
}