我动态分配了一个3D数组。然后我将字符串分配给数组。 3D阵列打印出来很好。但我似乎无法找到将其传递给函数的方法。我尝试过将数组传递给函数的许多变体。以下是我的代码,非常感谢任何帮助。
//dynamically allocate 3d array
string *** array3D;
array3D = new string**[rows];
for(int i = 0; i < rows; i++)
{
array3D[i] = new string*[columns];
for(int j=0; j < columns;j++)
{
array3D[i][j] = new string[pages];
}
}
//put strings from file into array
for(int k = 0; k < pages; k++)
{
for(int i = 0; i < rows; i++)
{
for(int j=0; j < columns;j++)
{
puzzleFile >> array3D[i][j][k];
}
}
}
// Call function
find(array3D);
// The couts are simply to verify the array passed in successfully
void find(string ***&array)
{
cout << "in function array[0][0][0]" << array[0][0][0] << endl;
cout << "array[1][0][2]" << array[1][0][2] << endl;
cout << "array[1][0][2]" << array[0][2][1] << endl;
return;
}
答案 0 :(得分:1)
我不知道问题的具体细节,但是,您是否考虑过将这样的东西用于3D阵列:
#include <vector>
#include <string>
....
typedef std::vector<std::string>> V1d; // define a vector of strings: 'pages'
typedef std::vector<V1d> V2d; // define a vector of V1d: 'columns' of 'pages'
typedef std::vector<V2d> V3dS; // define a vector of V2d: 'rows' of 'columns' of 'pages'
...
void find(V3dS &a3d) {
// access the data here as a3d[i][j][k] per page
}
...
V3dS array3D(rows, V2d(columns, V1d(pages))); // declare your array with wanted sizes
...
puzzlefile >> array3D[i][j][k]; // Page data
...
find(array3D); // call your function
这也有一点好处:无需担心解除分配任何东西。当array3D变量超出范围时,向量将释放所有内容。 您可能会发现另一个有用的想法:)
答案 1 :(得分:-1)
尝试将重命名函数find
与myfind
。
与OP讨论后,才知道他错过了宣布功能原型。因此更新答案。
编辑:删除了string.h包含建议。