在 C ++ ,Codeblocks环境中,我声明:
int m[120][120][120];
我知道从m[0][0][0]
到m[119][119][119]
我有变量。
我可以让计算机开始从位置m[45][45][45]
声明内存吗?
我希望自己明确表示:)
答案 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所述。