2016-10-27 5 views
0

私は2つのクラスmy_matrixmy_vectorを持っています。クラスmy_vectormy_matrixから継承されています。またmy_matrixクラスは2d std::vector<std::vector<double>>で作られています。私はmy_vectorcolumn vector/column matrixにしたいと思っています。基本的にはnx1です。初期化中にstd :: initializer_listを列行列または列ベクトルに変換するにはどうすればよいですか?

私はstd::initializer_listで行列を初期化しようとすると、それは罰金

class my_matrix{ 
    public: 
     my_matrix(std::initializer_list<std::vector<double>> list: row(list.size(), 
            col((*list.begin()).size()), matrix(list){} 

    private: 
     std::vector<std::vector<double> matrix; // I am planning to use single contiguous memory in future 
    }; 

に動作します。これは、私が今、私はベクトル(数学)を作成するために行列を使用し、マトリックス my_matrix mat = {{1,2,3},{4,5,6}}; を初期化する価値することができます

class my_vector: public Matrix{ 
     my_vector(std::initializer_list<double> list):Matrix({list}){} 
     // my_vector(std::initializer_list<double> list) 
    //:Matrix({some how I could do {{list[0]}, {list[1]}, {list[2]}, ..}}){} 

    }; 

だから私がしようとするとmy_vector vec = {1,2,3};それは1xn行列を作成しますが、私が望んでいたのはnx1でした。

std::initializer_listを使用してnx1の列マトリックスを作成するにはどうすればよいですか?これを達成しようとするべき他の選択肢はありますか?

+1

あなたはmy_matrix' 'に保護されたコンストラクタを追加し、リストとダミーパラメータを取るかもしれませんコンストラクタで正しく設定してください。 – NathanOliver

+0

@NathanOliverああ!ええ、それは素晴らしい提案です。私はそれを試みます。 – pokche

+0

@ NathanOliverあなたが提案した通りに結果を得ました。あなたの提案に近いと思いますか? – pokche

答えて

0

保護ようにネイサンの提案の後、私はmy_matrixクラスに引数としてstd::initializer<double>を取るだろうと新しいコンストラクタを作成しました:

class my_matrix{ 
    public: 
     my_matrix(std::initializer_list<std::vector<double>> list: row(list.size(), 
            col((*list.begin()).size()), matrix(list){} 
    protected: 
     my_matrix(std::initializer_list<double> list):row(list.size()), col(1){ 
      vec_alloc() // allocates appropriate memory for 2d vector 
      int r = 0; 
      // This loop creates nx1 matrix 
      for(auto it = list.begin(); it != list.end(); it++){ 
       matrix[r][0] = *it; 
       r++; 
      } 
     } 
    private: 
     std::vector<std::vector<double> matrix; // I am planning to use single contiguous memory in future 
}; 

class my_vector: public Matrix{ 
public: 
    my_vector(std::initializer_list<double> list):Matrix(list){} 

}; 
関連する問題