C ++,我该如何制作动态3D矩阵?

时间:2014-01-27 08:28:12

标签: c++

C ++ ,Codeblocks环境中,我声明:

int m[120][120][120];

我知道从m[0][0][0]m[119][119][119]我有变量。

我可以让计算机开始从位置m[45][45][45]声明内存吗?

我希望自己明确表示:)

2 个答案:

答案 0 :(得分:2)

如果您只需要45..119,只需在每个维度中缩小矩阵45并转换值

// Very simple example to explain what I meant.
class MyMatrix
{
    public:
        SetValue(int x, int y, int z, float value) { mMatrix[x-45][y-45][z-45] = value; }
    private
        float mMatrix[120-45][120-45][120-45];
}

答案 1 :(得分:1)

你所说的基本上是在开始时保留/分配一些内存,如果以后需要更多内存,你希望它能够被扩展。

如果是这种情况,您最好使用std::vector,并将45作为初始容量。通常45太小,但如果你想设置它,你可以通过std::vector.reserve(n)方法完成。它会是这样的:

matrix = vector<vector<vector<float> > >();
matrix.reserve(45);
for (int i = 0; i < 45; i++)
{
    matrix[i] = vector<vector<float> >()
    matrix[i].reserve(45);
    for (int j = 0; j < 45; j++)
    {
        matrix[i][j] = vector<float>();
        matrix[i][j].reserve(45);
    }
}

您也可以使用 fill 构造函数实现相同的功能,如here所述。