在C ++中实现自然动态Matrix

时间:2012-06-04 22:27:53

标签: c++ dynamic operator-overloading override

我实际上有两个关于同一想法的问题:

我想创建一个TruthMatrix类,我该怎么做:

  1. 分配一个动态的nXn bools矩阵,这样做的唯一方法是:?
  2.   

    类TruthMatrix {

            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]
    2. 中的矩阵元素

      谢谢!

2 个答案:

答案 0 :(得分:4)

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

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

    < / LI>

    示例:

    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]
     };
    

答案 1 :(得分:0)

一种方法如下:

vector<vector<bool>> tm(n, vector<bool>(n));

tm[i][j] = true;