在Class中初始化2d数组

时间:2014-11-17 21:18:30

标签: c++

我将如何初始化二维数组?它声明我需要对多维数组的维度进行绑定。

头:

Class MyClass{
private:
    long x;
    long y;
    long matrix[][];
public:
    MyClass(long x, long y);
}

源:

MyClass:MyClass(long a, long b){
    x = a;
    y = b;
    matrix[x][y];
}

这就是我想要做的。

2 个答案:

答案 0 :(得分:2)

使用std::vector<std::vector<long>>

private:
    long x;
    long y;
    std::vector<std::vector<long>> matrix;
public:
    MyClass(long x, long y) : x(x), y(y), matrix(x, std::vector<long>(y)) { }
};

答案 1 :(得分:0)

我建议您使用一个std::vector大小rows * cols来包含您的值。然后,您可以通过步幅访问给定的(row, col)

#include <iostream>
#include <vector>

class Matrix {
 public:

  Matrix(std::size_t rows, std::size_t cols)
      : m_data(rows * cols),
        m_rows(rows),
        m_cols(cols) { }

  long operator()(std::size_t row, std::size_t col) const {
    return m_data[row * m_cols + col];
  }

  long& operator()(std::size_t row, std::size_t col) {
    return m_data[row * m_cols + col];
  }

  // other methods here...

 private:
  std::vector<long> m_data;
  std::size_t m_rows;
  std::size_t m_cols;
};

int main() {
  std::size_t rows = 3;
  std::size_t cols = 6;
  long value       = 0;

  Matrix A(rows, cols);

  // fill
  for(std::size_t row = 0; row < rows; ++row) {
    for(std::size_t col = 0; col < cols; ++col) {
      A(row, col) = value++;
    }
  }

  // print
  for(std::size_t row = 0; row < rows; ++row) {
    for(std::size_t col = 0; col < cols; ++col) {
      std::cout << A(row, col) << " ";
    }
    std::cout << std::endl;
  }


  return 0;
}

一些优点:

  • 您不必担心内存管理,因为所有内容都由基础std::vector
  • 管理
  • 所有元素在内存中都是连续的,您可以选择存储顺序(我已经显示了行主要内容,但您可能需要列专业版)以根据您的访问模式提高性能
  • 轻松调整您的课程以处理模板参数并改变您的类型

请记住,在C ++中,符号A[M][N]仅对编译器有意义,并且最终会以行主顺序生成内存A[M * N]的线性段。