【发布时间】:2011-05-25 18:48:45
【问题描述】:
正如问题所说,我正在尝试将多维数组传递给一个函数,以将其打印到工程项目的文件中。输入数据的格式不能更改,所以请不要建议我只是输入为不同的数据类型。
这个特殊的函数需要一个二维数组(尽管我在这个数组之后还有其他的三个维度),在运行时之前对数组的大小一无所知。我知道我必须使用指针分别指向数组的每一行,但我不知道将它传递给函数的语法是什么。在下面的代码中,有问题的数组是“块”。 main 函数只是我为使其工作而制作的一个小测试示例:
#include<fstream>
using namespace std;
void of_write_blocks(string filename, string block_type[], int **block,
int grid[][3], string grade_type[], int grade[][3], int n_blocks, int m[])
{
ofstream file_out(filename.c_str(),ios::app);
file_out<<"\nblocks\n(\n";
for(int i=0;i<n_blocks;++i) {
file_out<<" "<<block_type[i]<<" ( ";
for(int j=0;j<m[i];++j)
file_out<<block[i][j]<<" ";
file_out<<") ( ";
file_out<<grid[i][0]<<' '<<grid[i][1]<<' '<<grid[i][2]<<" ) ";
file_out<<grade_type[i]<<" ( ";
file_out<<grade[i][0]<<' '<<grade[i][1]<<' '<<grade[i][2]<<" )\n";
}
file_out<<");\n";
}
//testing example:
int main()
{
int block[6][9];
for(int i=0; i<6;++i)
for(int j=0; i<9;++j)
block[i][j] = i*j;
int grid[6][3];
for(int i=0; i<6;++i)
for(int j=0; i<3;++j)
block[i][j] = i*j;
int grade[6][3];
for(int i=0; i<6;++i)
for(int j=0; i<3;++j)
block[i][j] = i*j;
string grade_type[6] = {"simpleGrading"};
string block_type[6] = {"hex"};
int m[6] = {8};
int n_blocks = 6;
of_write_blocks("name",block_type,block,grid,grade_type,grade,n_blocks,m);
}
感谢任何帮助!
【问题讨论】:
-
在过去的 25 年里,我从来没有,一次也没有,不得不使用多维数组。我错过了什么吗?
-
@Neil Butterworth 尝试解决三个维度上的最大和连续子序列问题。我在 C++ 中使用 std::vectors 实现了我的,它需要 4 维数组。
-
@user1344784 很公平 - 听起来像是我和我的各个雇主对解决的兴趣为零的问题。但是如果我要解决这些问题,我想我会使用一种 MDA 是一流对象的语言,比如 FORTRAN,在这个问题领域几乎肯定会比 C++ 性能更高。
-
@Neil Butterworth,我真希望有另一种方法。我将这个程序用于计算流体动力学,这就是他们需要输入的方式。 C++ 对进行与工程相关的计算可能会很麻烦,尤其是考虑到我在学习 C++ 之前就学习了 Matlab!
-
@Mike 流体动力学是 FORTRAN 擅长的经典领域,提供了许多函数库。使用 C++ 似乎是纯粹的受虐狂。
标签: c++ arrays function pointers