我想把一个3维数组从一个用户定义的函数返回到我的主函数中,让我们考虑一个简单的例子,a,b和c数组的任何特定值;
int*** my_function(int a[], int b[], int c[])
{
for(int i=0; i<2; i++)
{
for(int j; j<2; j++)
{
for(int k; k<2; k++)
{
array[i][j][k]=a[i]*b[j]*c[k];
}
}
}
return array
}
使用指针的一个更好的替代方法是使用std::vector
,因为它将负责内存分配和释放的细节。
如何初始化三维矢量?
3D向量简单地说就是一个向量,里面包含另外两个向量。 所以,如果你想用一个值a来初始化一个大小为X*Y*Z的3D向量,那么可以这样做:
vector<vector<vector<int> > > vec (X,vector<vector<int> >(Y,vector <int>(Z,A)))
如何从函数返回它?
您可以从下面的示例中看到如何返回它。
vector<vector<vector<int> > > sample_function()
{
for(int i=0; i<2; i++)
{
for(int j; j<2; j++)
{
for(int k; k<2; k++)
{
vec[i][j][k]=a[i]*b[j]*c[k];
}
}
}
return vec;
}
您可以使用std::array
。
如果大小是已知的编译时间,我建议使用std::array
,通过它可以获得连续的内存布局。
#include <iostream>
#include <array>
#include <algorithm> // std::generate
// alias for the required array
using Array3D = std::array<std::array<std::array<int, 2>, 2>, 2 >;
Array3D func()
{
Array3D arr3d;
std::array<int, 2> a{ 10, 20 }, b{ 10, 20 }, c{ 10, 20 }; // some a, b, c
// iterate through the arrays to initialize them!
auto input = 1u;
for (std::array<std::array<int, 2>, 2> & array2D : arr3d) // or auto& array2D: arr3d
for (std::array<int, 2> & arr : array2D) // or auto& arr: array2D
std::generate(arr.begin(), arr.end(), [&input] { return input++; });
// for array multimplications!
for (std::array<std::array<int, 2>, 2> & array2D : arr3d) // or auto& array2D
{
for (std::array<int, 2> & arr : array2D) // or auto& arr
{
auto arrIndex = 0u;
for (int& ele : arr)
{
ele = a[arrIndex] * b[arrIndex] * c[arrIndex];
++arrIndex;
std::cout << ele << " "; // to print the element!
}
}
}
return arr3d; // return the array like this!
}
或者使用模板化函数(将大小作为非模板参数),您甚至可以通过引用传递Array3D
,并进行上面所示的计算!
#include <iostream>
template<std::size_t M, std::size_t N, std::size_t O>
void func(int (&arr3d)[M][N][O])
{
// some a, b, c
for (std::size_t i = 0; i < M; ++i)
{
for (std::size_t j = 0; j < N; ++j)
{
for (std::size_t k = 0; k < O; ++k)
{
arr3d[i][j][k] = a[k] * b[k] * c[k];
std::cout << arr3d[i][j][k] << " "; // to print the element
}
std::cout << "\n";
}
std::cout << "\n";
}
// do not need to return!
}
正如其他人提到的,您可以使用std::array
或std::vector
,但一个简单的方法是将数组作为参数传递给您的函数(而不是返回)。 像这样的事:
void your_function(int array[2][2][2], /* other parameters */) {
// body
}
然后像这样使用它:
int main() {
int arr[2][2][2];
your_function(arr, /* other arguments */);
// now do what you want with arr
}