将值从向量分配给动态数组(C++)
Posted
技术标签:
【中文标题】将值从向量分配给动态数组(C++)【英文标题】:Assign values from vector to dynamic array (C++) 【发布时间】:2016-09-01 02:24:43 【问题描述】:我有一个名为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];
感谢任何帮助!
【问题讨论】:
这里有一些帮助:阅读帮助中心文章,了解如何组装minimal reproducible example,然后相应地编辑您的问题。 您将向量/数组传递给什么特定的 OpenGL 函数?你现在怎么称呼它? 所以这个向量必须是数组的形式 -- 嗯??只需调用vector::data()
函数,您就知道 vector
具有您正在寻找的 array
吗?
@PaulMcKenzie 显然不是,这就是他们问这个问题的原因......你为什么不回答解释误解而不是不那么巧妙地侮辱 OP?我在 SO 上看到太多你类型的 cmets。 Be nice.
代码使用new[]
使用向量中的条目数清楚地创建浮点数组,然后设置循环中的每个条目(您可以使用std::copy
BTW)。因此,我认为这段代码没有任何问题(除了由于向量具有vector::data()
函数来获取数组而无需执行任何操作)。我认为您误解了调试器向您显示的内容。
【参考方案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];
【讨论】:
我正在尝试使用 glVertex2fv(),我相信它只需要一个指向数组的指针。我将如何做到这一点? @qxz --// NO () - not a constructor, but operator new[]
-- 在new[]
的用法中加上括号是完全有效的。它所做的只是对元素进行零初始化。
new[]
的部分答案实际上与 OP 在最终结果方面的尝试没有什么不同。唯一的区别是 OP 尝试使用 ()
初始化数据并在循环中调用 at()
。以上是关于将值从向量分配给动态数组(C++)的主要内容,如果未能解决你的问题,请参考以下文章