1

私は実際に同じアイデアについて2つの質問があります:

TruthMatrixクラスを作成したいのですが、どうすればよいですか?

  1. boolsの動的nXn行列を割り当てます。これを行う唯一の方法は、次のとおりです。

クラス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]などの行列要素にすばやくアクセスします。

ありがとう!

4

2 に答える 2

4
  1. いいえ、それが唯一の方法ではありません。1つの大きな配列でマトリックスをシミュレートでき、STLコンテナーを使用してメモリ管理を容易にすることができます(1つ)。(または使用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]
 };
于 2012-06-04T22:33:10.447 に答える
0

これを行う1つの方法は次のとおりです。

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

tm[i][j] = true;
于 2012-06-04T22:35:52.107 に答える