复制vector <vector> C ++的构造函数

时间:2019-11-05 09:02:58

标签: c++

所以我有一个此类表示我的头文件中的矩阵。我的问题是如何通过已创建的矩阵来初始化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;
};

2 个答案:

答案 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() + colcol * rows() + row

答案 1 :(得分:1)

当然!你为什么不呢?但是Matrix_t是内部数据阶段对象的类型。复制构造函数应从同一类的对象复制。即

Matrix(const Matrix& m);

...实际上Matrix_t应该是内部私有类型。您可能正在寻找initializer list构造函数。

Matrix(initializer_list<initializer_list<double>>);