-4

我将内存分配给二维数组,我知道它的深度

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

我做对了吗?

4

3 回答 3

1

不,您需要for(int i=0; i<size; i++)让循环只执行size时间。但这不是最优雅的方法。在 C++ 中,建议我们使用 STLvector代替数组来避免内存管理:

vector<vector<int> > array;

请参阅在 C++ 中使用数组或 std::vectors,性能差距是什么?

于 2013-05-10T20:36:02.567 回答
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];
  }
};

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

我在这里写了一篇博文

于 2013-05-10T21:37:32.473 回答
0

你想要一个动态二维数组还是指向堆栈上的堆的指针数组?

指向堆栈上堆的指针数组照常进行(如另一张海报所建议的那样)。

对于动态二维数组如何在 C++ 中使用 new 声明二维数组?.

于 2013-05-10T20:49:41.953 回答