Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将值从向量分配到动态数组(C+;+;)_C++_Arrays_Vector_Dynamic - Fatal编程技术网

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];
}