目前我正在使用std::initializer_list<std::vector<double>>
初始化我的矩阵类。
class matrix{
public:
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
};
这允许我初始化矩阵值
matrix mat = {{1,2,3},{4,5,6}};
现在我使用矩阵来创建矢量(数学)
class Vector: public Matrix{
Vector(std::initializer_list<double> list):Matrix(list){}
// Vector(std::initializer_list<std::vector<double>> list):Matrix(list){}
};
我想为Vector做些什么
Vector vec = {1,2,3};
但由于我无法将std::initializer_list<double>
传递到基地,因此我无法使用
Vector vec = {{1,2,3}};
我不想要的。
还有其他方法可以处理这种情况(通过删除initializer_list并使用完全不同的东西)或者我应该坚持使用initializer_list吗?
我认为intializer_list在运行时进行初始化,我从here读取它。有没有办法在编译时进行初始化?
答案 0 :(得分:3)
我修改了你的代码,至少它编译了。希望它有所帮助:
class Matrix {
public:
Matrix(std::initializer_list<vector<double>> _list):
row(_list.size()), col((*_list.begin()).size()), m_matrix(_list){}
private:
size_t row, col;
std::vector<std::vector<double>> m_matrix; // I am planning to use single contiguous memory in future
};
class MyVector: public Matrix{
public:
MyVector(std::initializer_list<double> _list): Matrix({_list}) {}
};
另一方面,使用vector或list作为可验证名称并不是一个好主意,因为它们是C ++ STL中的容器名称。
答案 1 :(得分:1)
您可以将initializer_list<initializer_list<double>>
传递给父matrix
类:
Vector(std::initializer_list<double> list):matrix({list}){}