C ++:创建包含三维数组元素的一维数组

时间:2014-01-24 02:51:25

标签: c++ arrays

我正在尝试创建包含三维数组元素的一维数组

例如:

float array[4][3][6];

for (int j = 0; j < 3; j++) {
  for (int k = 0; k < 6; k++) {
     temp[4] = {array[0][j][k],array[1][j][k],array[2][j][k],array[3][j][k]};
  }
}

然而,当我编译代码时,它返回了第4行的错误:error: expected primary-expression before ‘{’ token error: expected;'在'{'token`之前

有谁知道这里出了什么问题?

此方法之前有效,但我真的很难过现在发生的事情。

谢谢。

3 个答案:

答案 0 :(得分:1)

   // create 1d array with 3d property's 
   float array[width * height * depth];

    // get and set functions
    float get(int x,int y,int z)
    {
         return array[x + (y * width)+ (z * width * height)];
    }
    void set(float value,int x,int y,int z)
    {
         array[x + (y * width)+ (z * width * height)] = value;
    }


//iterate over the array
for(int z = 0; z < depth; ++z)
  for(int y = 0; y < height; ++y)
    for(int x = 0; x < width ; ++x)
        get(x,y,z);

答案 1 :(得分:0)

{}只能在编译时用于初始化,需要保持不变。

您需要使用float temp[4];,然后在循环中使用

temp[0] = array[0][j][k]
temp[1] = array[1][j][k]
temp[2] = array[2][j][k]
temp[3] = array[3][j][k]

这将使你的代码编译,但你知道最后,只有你的3-d数组的4个组件将保留,那些将是

array[0][2][5],array[1][2][5],array[2][2][5],array[3][2][5]

除非您没有显示所有代码,否则您也可以跳过2个循环并直接影响它们。

答案 2 :(得分:0)

我认为你可以使用这样的东西:

float array[4][3][6];

for (int j = 0; j < 3; j++) {
   for (int k = 0; k < 6; k++) {
      for (int i=0; i < 4; i++ )
         temp[i] = array[i][j][k];
   }
}