2016-04-08 18 views
-2

私はありがとう2次元配列のクラスを作成するにはどうすればよいですか?

matrix<int, 2, 2> tonpai = { { 1,2 },{ 3,4 } }; 

の下に文をサポートするために、ジェネリックプログラミングを使用してクラスを作成します。 //これをやろうとしていますが、どのコンストラクタの引数が必要かわかりません。私の英語には申し訳ありません。これは私の最初の質問です。

+0

が、これは、これを行う方法を理解するために学術的運動です、またはあなたが必要とするので、それを行うツールですか? – tadman

+0

['std :: array'](http://en.cppreference.com/)の[' std :: array'](http://en.cppreference.com/w/cpp/container/array)はどうですか? cpp/container/arrayを使用していますか?) –

+0

はい、私はこの演習をしようとしていますが、どのコンストラクタの引数が必要かわかりません。 – BeginTP

答えて

1

あなたの質問は、実際にあなたのクラスのコンストラクタがこの種の初期化子リストを受け入れるようにする方法だと思います。しかし、コメント者は、あなたが行列クラスを実装する方法を尋ねていると思っているようです。

私はこれについて正しいですが、ここではイニシャライザリストからの構築の例を示します。

私が間違っている場合は、この例の配列の実装が悪く、使用したくないことに注意してください。私はCスタイルの静的配列を選択しました。なぜなら、設定が簡単で、人々の働き方に慣れているからです。

また、リストの要素数が多すぎる場合は、この初期化によって配列の境界外に書き出されるため、クラスには注意してください。

また、コンストラクタconstexprの保持について気にしないと仮定します。

だからここでは、唯一その2 - ネストされた初期化子リストを受け入れるコンストラクタの例です...:

#include <initializer_list> 
#include <iostream> 

template <typename T, int row_count, int col_count> 
class matrix { 
    T carray[row_count][col_count]; 
public: 
    matrix(std::initializer_list< std::initializer_list<T> > init_list) { 
     int rowidx=0; 
     for(const auto& row : init_list) { 
      int colidx=0; 
      for(const auto& elem : row) { 
       carray[rowidx][colidx++] = elem; 
      } 
      ++rowidx; 
     } 
    } 

    void Print() const { 
     for(const auto& row : carray) { 
      for(const T& elem : row) { 
       std::cout << elem << " "; 
      } 
      std::cout << '\n'; 
     } 
    } 
}; 


int main() { 
    matrix<int, 2, 2> tonpai = { { 1,2 }, { 3,4 } }; 
    tonpai.Print(); 
} 
+0

これはいいですね。よくやった! –

+0

ありがとう! (彼はそれが彼が求めていると思いますか?そうなら、私は彼のチーズを風に残したくありませんでした)。 –

+1

です。 (_ "どのコンストラクタの引数が必要かわからない" _) –

関連する問題