我试图确定在构造函数中为3d数组分配内存的最佳实践。
目前我有: region.h
#ifndef REGION_H
#define REGION_H
struct region_data
{
unsigned char ID;
unsigned int data;
};
class region
{
private:
region_data * data;
public:
region(unsigned int x, unsigned int y, unsigned int z);
~region();
};
#endif
和region.cpp:
#include <cstdlib>
#include "region.h"
region::region(unsigned int x, unsigned int y, unsigned int z)
{
data = static_cast<region_data*>(malloc( sizeof(region_data) * x * y * z ));
}
然而,我知道我犯了在c ++中使用malloc的错误。做我想在这里完成的事情有什么更好的方法?我知道三重嵌套向量,但我想学习一种没有向量的方法,主要是为了在这里学习,部分是为了避免向量的开销(尽可能小),部分是因为语法为三层嵌套的向量是冗长而丑陋的!
请随意提及我所犯的任何其他错误。 :)
谢谢!
编辑: 重复显示C的答案,但不是C ++的答案。
编辑2: 问题不是询问如何访问数组,而是如何分配它。
编辑3: &#34;丑陋&#34;有问题的语法是:
std::vector< std::vector< std::vector<region_data> > > data;
有点难以阅读IMO。此外,用空数据填充3d数组非常难看,但这可能需要成为自己的问题。请不要试图让我使用矢量,我希望人们只是回答我原来的问题。
编辑4: 尝试使用矢量,这里是填充代码。布莱什。
void region::fill(unsigned int x, unsigned int y, unsigned int z)
{
std::vector< std::vector< region_data > > temp;
std::vector< region_data > temp2;
region_data temp3;
temp3.ID=0;
temp3.data=0;
for(int i=0; i<x; i++)
{
for(int j=0; j<y; j++)
{
for(int k=0; k<z; k++)
{
temp2.push_back(temp3);
}
temp.push_back(temp2);
}
data.push_back(temp);
}
}