在C++中实现自然动态矩阵

Implement natural dynamic Matrix in C++

本文关键字:动态 自然 实现 C++      更新时间:2023-10-16

我实际上对同一个想法有2个问题:

我想创建一个 TruthMatrix 类,我该如何:

  1. 分配一个布尔值的动态nXn矩阵,唯一的方法如下:

类真相矩阵 {

        bool **mat;
    public:
        TruthMatrix(int n) {
            mat=new bool*[n];
            for (int i=0;i<n;i++) {
                mat[i]=new bool[n];
            }
        }
    };
  1. 覆盖 [][] 运算符以快速访问矩阵元素,例如 MAT[i][j]

谢谢!

  1. 不,这不是唯一的方法。您可以模拟具有一个大型数组的矩阵,也可以使用 STL 容器来简化内存管理(例如)。(或使用dynamic_bitset或类似)。

  2. 这可能不值得。矩阵类通常用 operator() 下标,因为它更容易实现。要使用几个方括号(类似于数组数组)来执行此操作,您需要一个合适的代理对象从operator[]返回(请注意,没有 operator[][] 这样的东西)。

例:

class TruthMatrix {
    /* ... */
    bool& operator()(int row, int column); // usage: matrixobj(1, 2)
};
// or
class TruthMatrix {
     /* ... */
     class Proxy {
         /* ... */
         bool& operator[](int column);
     };
     Proxy operator[](int row); // usage: matrixobj[1][2]
 };

一种方法如下:

vector<vector<bool>> tm(n, vector<bool>(n));
tm[i][j] = true;