0

マトリックスクラスを作成しました:

template <typename T>
class Matrix
{
    static_assert(std::is_arithmetic<T>::value,"");

public:
    Matrix(size_t n_rows, size_t n_cols);
    Matrix(size_t n_rows, size_t n_cols, const T& value);

    void fill(const T& value);
    size_t n_rows() const;
    size_t n_cols() const;

    void print(std::ostream& out) const;

    T& operator()(size_t row_index, size_t col_index);
    T operator()(size_t row_index, size_t col_index) const;
    bool operator==(const Matrix<T>& matrix) const;
    bool operator!=(const Matrix<T>& matrix) const;
    Matrix<T>& operator+=(const Matrix<T>& matrix);
    Matrix<T>& operator-=(const Matrix<T>& matrix);
    Matrix<T> operator+(const Matrix<T>& matrix) const;
    Matrix<T> operator-(const Matrix<T>& matrix) const;
    Matrix<T>& operator*=(const T& value);
    Matrix<T>& operator*=(const Matrix<T>& matrix);
    Matrix<T> operator*(const Matrix<T>& matrix) const;

private:
    size_t rows;
    size_t cols;
    std::vector<T> data;
};

std:initializer_list を取得する ctor を提供したいと考えています。行と列の数も尋ねなければなりません。std:initializer_list のサイズが行*列と等しいかどうかを確認し、そうでない場合は例外を発生させることができますが、この解決策はあまり好きではありません。std:initializer_list が長すぎる場合、行列がいっぱいのときに std:initializer_list 要素を使用することを好みます。問題は、要素ごとに std:initializer_list 要素にアクセスする方法がわからないことです。誰かが私を助けることができますか?std:initializer_list で行列を初期化するためのより良い解決策はありますか?

4

1 に答える 1

1

initializer_list<T>メンバー関数begin()およびを使用して、 の要素を取得できますend()。この点で、コンテナのように機能します。

于 2012-08-18T19:39:55.980 に答える