6

私はMatrix2Dクラスを書いています。最初はコンストラクタを次のように使用していましたが、

私のコード:

Matrix2D(float a,float b, float c,float d)
{
    a_=a;
    ....
} 

しかし、多次元を使用できればはるかに優れていることに気付きましたarray [2][2]。そこに問題があります。 array のコンストラクターはどのように記述すればよいですか?

class Matrix
{
    float matrix[2][2];
    public:
    Matrix2D(float a,float b,float c, float d)
    {
        matrix[2][2]={a,b,c,d} // not valid
    }
}

念のために言っておきますが、完全なコードは要求しません。私を正しい軌道に乗せてくれる人が必要なだけです。

4

5 に答える 5

4

C++11の場合、次のことができます。

Matrix(float a,float b,float c, float d) :
   matrix{{a,b},{c,d}}
{
}

C++03のクリーンな代替手段はありません。

于 2012-10-01T19:21:25.447 に答える
2
matrix[0][0] = a; // initialize one element

等々。

于 2012-10-01T19:11:02.813 に答える
1

matrix[0][0] = マトリックスにしたい値 [n][n] = 必要な値ですが、ループ内でカウントアップするため、マトリックスのサイズを動的にしたり、コードを後で再利用したりできます。

for(int ii(0); ii < first dimension size; ++ii)
{
   for(int ll(0); ii < second dimension size; ++ll)
   {
     matrix[ii][ll] = value you want;
   }
}

これにより、このアプリケーションの外でコードがより拡張可能になり、より便利になります。

于 2012-10-01T19:29:07.757 に答える
0

行列 2X2 の場合は、float 配列を渡してループすることができます。

例えば

for(int x = 0;x<4;x++)
{
    matrix[0][x] = myarray[x];
}
于 2012-10-01T19:15:18.123 に答える
0

C++11 コンパイラを使用している場合は、Luchian のバージョンが最適です。これは、C++ のすべてのバージョンで機能するものです。

struct matrix_holder { float matrix[2][2]; };

class Matrix : matrix_holder
{
    static matrix_holder pack(float a,float b,float c, float d)
    {
        matrix_holder h = { {{a, b}, {c, d}} };
        return h;
    }

public:
    Matrix(float a,float b,float c, float d) : matrix_holder(pack(a,b,c,d))
    {
    }
};

オプティマイザーはヘルパーをインライン化します。

于 2012-10-01T19:27:39.063 に答える