我已经创建了一个适用于静态数组的类,但是当我尝试将它与动态数组一起使用时,它无效。 (为了不用长长的代码填充这个页面,我只复制了我班级的一个函数)
我认为我的动态数组没有正确创建,但我不确定我错在哪里。
即使你在这里,我只是在我的项目中使用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;
}
答案 0 :(得分:1)
const int N = 10;
const int M = 10;
const int O = 4;
如果N
和O
确实是常量,则可以将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++) {
然而,尽管如此,矢量会更清晰。