所以我有一个此类表示我的头文件中的矩阵。我的问题是如何通过已创建的矩阵来初始化org_matrix,例如:
Matrix_t m{
{INF, 10, 8, 19, 12},
{10, INF, 20, 6, 3},
{8, 20, INF, 4, 2},
{19, 6, 4, INF, 7},
{12, 3, 2, 7, INF}
};
我可以定义该对象的副本构造函数吗?
using Matrix_t = std::vector<std::vector<double>>;
class Matrix{
public:
Matrix(const Matrix_t& m);
private:
Matrix_t org_matrix;
};
答案 0 :(得分:2)
Matrix(const Matrix_t& m);
不是副本构造函数,只是一个采用Matrix_t
的构造函数。
感谢std::vector
复制构造函数,其代码非常简单:
Matrix(const Matrix_t& m) : org_matrix(m)
{}
但是,对矩阵使用std::vector<std::vector<double>>
并不是一个好主意。使用单个std::vector<double>
,然后在此“扁平化”数组中将索引计算为row * cols() + col
或col * rows() + row
。
答案 1 :(得分:1)
当然!你为什么不呢?但是Matrix_t
是内部数据阶段对象的类型。复制构造函数应从同一类的对象复制。即
Matrix(const Matrix& m);
...实际上Matrix_t
应该是内部私有类型。您可能正在寻找initializer list构造函数。
Matrix(initializer_list<initializer_list<double>>);