如何在初始化期间将 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_matrix
和my_vector
。 my_vector
类继承自 my_matrix
。 my_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<double>
作为 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?