C ++将数组复制到指针参数中

时间:2015-02-15 18:50:55

标签: c++ arrays

每个人,

我正在用C ++编写一个用于计算空间中的点的类。我正在设计这个类独立于应用程序,所以基本上我想要的 -

使用输入参数初始化对象 - >计算值 - >检索计算出的数组

我更喜欢使用类似C的数组(不是std::array)。我正在编写getter函数 -

// The definition of the ctrlpoints array
GLfloat ctrlpoints[4][4][3];

void GlCircle::getControlPoints(GLfloat* controlPoints) {
    std::copy(std::begin(ctrlpoints), std::end(ctrlpoints), std::begin(controlPoints));
}

基本上它应该将ctrlpoints数组中的所有值复制到controlPoints目标数组。当然编译器不允许我这样做(它不像std::begin(controlPoints)的类型)。也许有人可以提出一个想法,我该如何返回数组的副本?也许这个想法可以通过其他方式实现,请告诉我。

提前致谢。

1 个答案:

答案 0 :(得分:3)

void GlCircle::getControlPoints(GLfloat* controlPoints) {
    std::copy(std::begin(ctrlpoints), std::end(ctrlpoints), std::begin(controlPoints));
}

不起作用,因为std::begin(ctrlpoints)std::end(ctrlpoints)可用于迭代3D数组的2D数组,它不会自动展平3D数组,因此您可以将其视为一维数组

您可以使用三个for循环将成员变量中的数据传递给输出参数。

void GlCircle::getControlPoints(GLfloat* controlPoints) {
    int index = 0;
    for ( int i = 0; i < 4; ++i )
    {
       for ( int j = 0; j < 4; ++j )
       {
          for ( int k = 0; k < 3; ++k )
          {
             controlPoints[index++] = ctrlpoints[i][j][k];
          }
       }
    }
}