您可以使用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!
}