在构造函数中为3d数组分配内存

时间:2014-09-23 21:16:49

标签: c++ arrays

我试图确定在构造函数中为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);
    }    
}

0 个答案:

没有答案