【问题标题】:Initialize a matrix with std::initializer_list用 std::initializer_list 初始化矩阵
【发布时间】:2012-08-18 19:29:28
【问题描述】:

我创建了一个矩阵类:

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 大小是否等于 rows*columns ,如果不是,则午餐例外,但我不太喜欢这个解决方案。如果 std:initializer_list 太长,我更喜欢在矩阵已满时使用 std:initializer_list 元素:问题是我现在不知道如何逐个访问 std:initializer_list 元素。有人能帮我吗?您有更好的解决方案来使用 std:initializer_list 初始化矩阵吗?

【问题讨论】:

    标签: c++ matrix initializer-list


    【解决方案1】:

    您可以使用成员函数begin()end() 获取initializer_list&lt;T&gt; 的元素。在这方面,它就像一个容器。

    【讨论】:

    • 是的,但我必须获取整个 std::initializer_list,从 begin() 到 end()。如果我创建一个 2x2 矩阵和 std::initializer_list 如果有 5 个元素,我只需要前 4 个元素来初始化我的矩阵。
    猜你喜欢
    • 2016-12-22
    • 1970-01-01
    • 2018-01-13
    • 2019-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-04
    • 1970-01-01
    相关资源
    最近更新 更多