0

以下のマークされた行の意味を誰か説明できますか? 通常、マトリックスを初期化しています。

サイズ = 3 としましょう。次に、6 つの位置を持つマトリックス、つまり 1x6 マトリックスを作成する必要があります。しかし、毎回ここで2行目が必要です。そして、なぜ毎回-1を押しているのですか?

for (unsigned i = 0; i < size(); i++) { 
    vector<int> *t = new vector<int>;       // (1)
    for (unsigned j = 0; j <= i; j++) { 
        t->push_back(-1);                   // (2)
    }
    matrix.push_back(*t);   
}
4

1 に答える 1

1

このコードは、正方行列の上部または下部(インデックスの解釈に応じて)の三角形を作成して初期化します。Line(1)は、新しい行または列のベクトルを割り当てます。Line(2)は、任意の値()を使用して、行列の対角までの値を初期化します-1。コードが初期値として使用する理由は、コードを-1調べるか、付属のドキュメントを読むことによってのみ答えることができます。

機能ラインに加えて(1)、メモリリークが発生します。matrixは所有権を取得しないため、スコープ外になっtたときにメモリを再利用する方法はありません。t修正されたコードは次のようになります。

for (unsigned i = 0; i < size(); i++) { 
    vector<int> t;       // (1)
    for (unsigned j = 0; j <= i; j++) { 
        t.push_back(-1); // (2)
    }
    matrix.push_back(t);
}

(1)lineは、スコープ外になると自動的に破棄されるオブジェクトを割り当てることに注意してください。これにより、元のコードのメモリリークが修正されます。サイズが3であると仮定すると、これは次のようになります。

-1 -1 -1          -1
   -1 -1    or    -1 -1
      -1          -1 -1 -1

マトリックスへの最初のインデックスが行または列のどちらを参照しているかによって異なります。

于 2013-01-04T16:21:12.637 に答える