就像問題所說,我試圖將多維數組傳遞給一個函數,以將其打印到工程項目的文件中。數據輸入的格式不能改變,所以請不要建議我只是輸入它作爲不同的數據類型。如何將未知大小的多維數組傳遞給使用C++中的指針的函數?
這個特殊的函數預期了一個二維數組(儘管在這個數組之後我有其他三個維度的數組),在運行時間之前什麼都不知道數組的大小。我知道我必須使用指針來分別指向數組的每一行,但我不知道將它傳遞給函數的語法是什麼。在下面的代碼中,所討論的數組是'block'。主要功能只是我嘗試使其工作的一個小測試示例:
#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年中,我從來沒有,一次也沒有,只好用一個多維數組。我錯過了什麼嗎? – 2011-05-25 19:04:56
@Neil Butterworth嘗試在三個維度上解決最大連續子序列問題。我用std :: vectors在C++中實現了它,它需要4維數組。 – Arlen 2011-05-25 19:20:34
@ user1344784夠公平 - 聽起來像是我和我的各種僱主對解決問題毫無興趣的問題。但是如果我要解決這些問題,我想我會使用一種語言,其中MDAs是一流的對象,比如說FORTRAN,在這個問題領域中,這幾乎可以肯定比C++更高效。 – 2011-05-25 19:25:44