我创建了一个矩阵类:
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初始化矩阵?
答案 0 :(得分:0)
您可以使用成员函数initializer_list<T>
和begin()
获取end()
的元素。在这方面,它就像一个容器。