我想将一系列2D数组传递给一个函数,然后将其保存到文件中。我的"保存功能"如下:(问号表示我不知道我到底在做什么。)
void saveArray(double* z(?),double* u1(?),double* u2 (?),double* theta (?), int row,
int column)
{
ofstream output("data.csv");
for(int j=0;j<row;++j)
for(int i=0;i<column;i++)
{
output<<setprecision(32)<<z[j]<<","<<setprecision(32)<<u1[j][i]<<","
<<setprecision(32)
<<u2[j][i] <<","<<setprecision(32)<<theta[j][i]<<endl;
}
z是:z [30000],u1,u2和θ是[101] [30000] 2D阵列。
如果这令人困惑,请告诉我,我可以发布整个代码。
答案 0 :(得分:2)
我发现通过将它们视为1d数组来处理2d数组要容易得多,至少在将它们作为参数传递时是这样。
void saveArray(double* z, double* u1, double* u2, double* theta, int row, int column)
{
ofstream output("data.csv");
for(int j=0; j<row; ++j)
for(int i=0; i<column; i++)
{
int offset = j * column + i;
output <<setprecision(32)<<z[j]<<","
<<setprecision(32)<<u1[offset]<<","
<<setprecision(32)<<u2[offset] <<","
<<setprecision(32)<<theta[offset]<<endl;
}
}
当您调用它时,请务必取消引用您的2D阵列:
saveArray(z, *u1, *u2, *theta, 101, 30000);
您也可以通过引用传递数组的另一种方式,并且您不需要传递大小。只有拥有实际数组,而不只是指向它们的指针时,这才有效:
template<size_t R, size_t C>
void saveArray(double (&z)[C], double (&u1)[R][C], double (&u2)[R][C], double (&theta)[R][C])
{
ofstream output("data.csv");
for(int r=0; r<R; ++r)
for(int c=0; c<C; ++c)
{
output <<setprecision(32)<<z[c]<<","
<<setprecision(32)<<u1[r][c]<<","
<<setprecision(32)<<u2[r][c] <<","
<<setprecision(32)<<theta[r][c]<<endl;
}
}
然后你就这样称呼它:
saveArray(z, u1, u2, theta);