2

私のクラス Matrix には、ディープ コピーを実行するコピー コンストラクターを含む 2 つのコンストラクターがあります。このようなソリューションは、別のオブジェクトをコピーするという明らかなケースでうまく機能します。ただし、次の場合:

Matrix m = m1 * m2; // for earlier constructed m1 & m2

m に直接割り当てられるのではなく、オブジェクトをコピーするためだけに乗算演算でオブジェクトを作成したため、効率が悪いように思えます。また、行列は非常に大きなメモリを占有する可能性があります。それをより良く処理する方法、プロによる一般的な慣行は何ですか?

Matrix は、疎行列の場合と同様に、2 次元リストとして動的に実装されます。

PS 乗算の結果がローカルであることは理解しています。とはいえ、上記のような余計な計算をしなくても、なんとかうまく扱えるのではないかと思いました。

4

1 に答える 1

6

C ++ 11では、移動コンストラクターを作成できます。これは、あなたの場合はより高速であるはずです。http://thbecker.net/articles/rvalue_references/section_01.htmlのようなチュートリアルがすでにたくさんあるので、その方法を説明するつもりはありません。

構文は異なりますが、このようなコードの最適化に適した式テンプレートを試すこともできます。開始するには、 http://en.wikipedia.org/wiki/Expression_templatesを参照 してください。

于 2012-12-05T05:14:17.617 に答える