将内存分配给二维阵列

时间:2013-05-10 20:34:17

标签: c++ arrays memory dynamic

我正在为二维数组分配内存,我知道深度

int *array[size];
for(int i=0;;i++)
{
   array[i]=new int[10];
}

我做得对吗?

3 个答案:

答案 0 :(得分:1)

不,您需要for(int i=0; i<size; i++),以便循环仅执行size次。但这并不是最优雅的方式。在C ++中,建议我们使用STL vector而不是数组来避免内存管理:

vector<vector<int> > array;

请参阅Using arrays or std::vectors in C++, what's the performance gap?

答案 1 :(得分:0)

你想要一个动态的2d数组或指向堆栈堆的指针数组吗?

堆栈上指向堆的指针数组随身携带(如另一张海报所示)。

对于动态二维数组How do I declare a 2d array in C++ using new?

答案 2 :(得分:0)

你真的不应该以这种方式实现矩阵 - 真的。除非尺寸发生变化,否则请不要。

更好的方法是:

template<typename Ty>
class  matrix {
public:
  const unsigned dim_x, dim_y;

private:
  Ty* const data;

public:
  matrix(const unsigned dim_x, const unsigned  dim_y) 
    : dim_x(dim_x), dim_y(dim_y), data(new Ty[dim_x *dim_y])
  {}

  ~matrix() {
    delete[] data;
  }

  const Ty at(unsigned i, unsigned j) const {
    return data[i + j*dim_x];
  }

  Ty& at(unsigned i, unsigned j) {
    return data[i + j*dim_x];
  }
};

然后只使用矩阵类访问数据。

我写了一篇关于它的博客文章here