如何在初始化期间将 std::initializer_list 转换为列矩阵或列向量?

Posted

技术标签:

【中文标题】如何在初始化期间将 std::initializer_list 转换为列矩阵或列向量?【英文标题】:How to turn std::initializer_list into column matrix or column vector during initialization? 【发布时间】:2016-10-27 20:55:54 【问题描述】:

我有两个班级my_matrixmy_vectormy_vector 类继承自 my_matrixmy_matrix 类也是由 2d std::vector<std::vector<double>> 组成的。我想让my_vector 成为column vector/column matrix,它基本上是一个nx1 矩阵。

当我尝试通过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 的列矩阵?我应该尝试实现其他任何选择吗?

【问题讨论】:

您可以将受保护的构造函数添加到 my_matrix 并让它获取列表和一个虚拟参数,并在构造函数中正确设置它。 @NathanOliver 哦!是的,这是一个很好的建议。我会试试的。 @NathanOliver 我按照你的建议做了,结果如下......你认为我接近你的建议吗? 我觉得不错。 【参考方案1】:

所以在 Nathan 的建议之后,我创建了一个新的构造函数作为受保护的,它将 std::initializer&lt;double&gt; 作为 my_matrix 类中的参数:

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)

;

【讨论】:

以上是关于如何在初始化期间将 std::initializer_list 转换为列矩阵或列向量?的主要内容,如果未能解决你的问题,请参考以下文章

如何在初始化期间访问 UserControl 的 XAML 集属性?

从多页应用程序进行身份验证后,如何在初始下载期间将 JWT 令牌加载到 React?

在过程模拟期间初始化状态变量的导数

在swift初始化期间使用枚举设置属性

如何让 HSQLDB 在从 .script 文件初始化数据源期间发出错误消息?

JavaFX:如何在初始化期间从控制器获取阶段?