动态3D数组不能在我的班级上工作(使用矢量会更好吗?)

时间:2014-04-05 12:24:24

标签: c++ arrays dynamic vector

我已经创建了一个适用于静态数组的类,但是当我尝试将它与动态数组一起使用时,它无效。 (为了不用长长的代码填充这个页面,我只复制了我班级的一个函数)

我认为我的动态数组没有正确创建,但我不确定我错在哪里。

即使你在这里,我只是在我的项目中使用10 X 10 x 4的阵列,我将需要使用大约1500 X 1500 X的阵列4.我的方法是准确的还是使用矢量更好,如果是这样,怎么能我实现了吗?

这是我的代码。

#include <iostream>
const int N = 10;
const int M = 10;
const int O = 4;
const double gama =1.4;


class Fluid
{
public:

    void SetInitialConditions(double *** Array_U, int initialX, int finalX, int initialY, int finalY, double rho, double u, double v, double p)  // initial conditions
    {
        for (int i = initialX; i<=finalX; i++)
            for (int j = initialY ; j<=finalY; j++) {
                Array_U[i][j][0]=rho;
                Array_U[i][j][1]=rho*u;;
                Array_U[i][j][2]=rho*v;
                Array_U[i][j][3]= (p/(gama-1)) + 0.5*rho*(u*u+v*v);

            }

        }
};
int main ()
{
    double ***my3dArray = new double**[M];
    for(int i = 0; i < M; i++)
    {
        my3dArray[i] = new double *[N];
        for(int j = 0; j < N; j++)
        {
            my3dArray[i][j] = new double[O];
        }
    }
    for(int i = 0; i < M; i++)
    {
        for(int j = 0; j < N; j++)
        {
            for (int k = 0; k< O; k ++) {
                my3dArray[i][j][k] = NULL;
            }
        }
    }


    Fluid test;
    test.SetInitialConditions(my3dArray, 0, M, 0, N, 0, 1, 2, 3);
    std::cout << my3dArray[1][1] << my3dArray [2][2] << std::endl;

}

2 个答案:

答案 0 :(得分:1)

const int N = 10;
const int M = 10;
const int O = 4;

如果NO确实是常量,则可以将3D数组分配到一个大块中:

double (*my3dArray)[N][O] = new double[M][N][O];
// ...
delete[] my3dArray;

在内存消耗和执行时间方面,这将更有效。

您可以找到比您想要了解的多维数组here更多的信息。

答案 1 :(得分:1)

你的问题似乎是这样的:

for (int i = initialX; i<=finalX; i++)
        for (int j = initialY ; j<=finalY; j++) {

您正在编写超出数组边界的内容。使用&lt ;, not&lt; =

    for (int i = initialX; i<finalX; i++)
        for (int j = initialY ; j<finalY; j++) {

然而,尽管如此,矢量会更清晰。