C++ 将值从向量分配到动态数组(C+;+;)
我有一个叫做C++ 将值从向量分配到动态数组(C+;+;),c++,arrays,vector,dynamic,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); } 感谢您的帮助 您可以将std::vector
lineVertices
的线的顶点向量,我将传递这些数据来绘制一个OpenGL图形,所以我假设这个向量必须是数组的形式。我尝试了以下代码:
float* lineArray = new float[lineVertices.size()]();
for (unsigned i = 0; i < lineVertices.size(); i++) {
lineArray[i] = lineVertices.at(i);
}
感谢您的帮助 您可以将
std::vector
直接传递给OpenGL函数,并将指针指向数组。只需使用成员函数。例如:
std::vector<float> vec = ...;
glVertex2fv(vec.data()); // only uses the first two elements
这里有一些帮助:阅读帮助中心的文章,了解如何组装一个数组,然后相应地编辑您的问题。您将向量/数组传递给哪个特定的OpenGL函数?你现在怎么称呼它?所以这个向量必须是数组的形式——嗯??您只需调用
vector::data()
函数,就知道vector
具有您要查找的array
了吗?@PaulMcKenzie显然不知道,这就是他们问这个问题的原因。。。你为什么不给出一个解释误解的答案,而不是如此微妙地侮辱OP?我看你的评论太多了。代码使用向量中的条目数,使用new[]
创建浮点数组,然后设置循环中的每个条目(您可以使用std::copy
BTW)。因此,我认为这段代码没有任何错误(除了由于向量具有获取数组的vector::data()
函数,因此不需要执行任何操作)。我认为您误解了调试器显示的内容。我试图使用glVertex2fv(),我认为它只接受指向数组的指针。我如何做到这一点?@qxz--//NO()-不是构造函数,而是运算符new[]
--在new[]
的用法中添加括号是完全有效的。它所做的只是零初始化元素。答案中带有new[]
的部分在最终结果方面与OP的尝试没有什么不同。唯一的区别是OP尝试使用()
初始化数据,并在循环中调用at()
。
std::vector<float> vec = ...;
glVertex2fv(vec.data()); // only uses the first two elements
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];
}