C++内存分配.矩阵

dop*_*umi 0 c++ memory allocation dynamic matrix

我研究了两种不同的方法来为矩阵的元素分配内存

方法n.1

int** matrix = new int*[rows];
for (int i = 0; i < rows; ++i)
    matrix[i] = new int[cols];
Run Code Online (Sandbox Code Playgroud)

方法n.2

int** matrix = new int*[rows];
if (rows)
{
    matrix[0] = new int[rows * cols];
    for (int i = 1; i < rows; ++i)
        matrix[i] = matrix[0] + i * cols;
}
Run Code Online (Sandbox Code Playgroud)

我可以弄清楚方法n.1做了什么,但我无法弄清楚究竟应该在方法n.2中做什么if子句(我会在没有它的情况下实现它,并且它不起作用,使用if子句,它...)

编辑:这是一个显示我的问题的代码.为什么加载需要这么长时间(~30秒)?

http://codepad.org/uKvI8Tk3

Codepad拒绝显示输出(超时),所以如果你想运行它,只需自己编译即可.

另外,为什么一旦程序启动就不执行cout <<语句?

jua*_*nza 5

方法n.3:编写自己的Matrix类,在内部使用单个std::vector<int>,并且聪明地通过(row,col)索引进行访问.

struct Matrix
{
  explicit Matrix(unsigned int rows, unsigned int cols) : data_(rows*cols), cols_(cols) {}
  const int& operator()(unsigned int row, unsigned int col) const
  {
    return data_[row*cols_ + col];
  }
 private:
  std::vector<int> data_;
  unsigned int cols_;
};
Run Code Online (Sandbox Code Playgroud)

编辑:如果向量的内存开销是上一个示例中的问题,您可以考虑使用一个动态分配的长度数组rows*cols,并确保delete []在析构函数中调用它.