C ++ - 创建一个向量<vector <double>&gt;矩阵与赋值而非inizialization

时间:2018-04-23 15:18:30

标签: c++ vector constructor stl

这是我之前提出的一个问题的后续问题的后续行动(我认为最好在这些案例中提出新问题)。

我创建了一个Matrix类作为向量&lt;矢量&lt;双&GT; &gt;,它接受两个整数作为输入(简单地说,矩阵的尺寸),并创建填充零的矩阵。

这是标题:

URL

,实施是:

class Matrix{
public:
/*Basic constructor, accepts matrix dimensions
Matrix(int nr, int nc);
private:
vector<vector<double> > Matrix_;
int nr_, nc_;
};

我被建议我可以使用

简化它
//CONSTRUCTOR
Matrix::Matrix(int nrows, int ncols)
    {
    nc_ = ncols;
    nr_ = nrows;

    /*creates rows*/
    for (int i = 0; i < nrows; i++)
        {
        vector<double> row;
        Matrix_.push_back(row);
        }
    /*Fills matrix with zeroes*/
    for (int i = 0; i < nr_; i++)
        {
        for (int j = 0; j < nc_; j++)
            {
            Matrix_[i].push_back(0);
            }
        }

    }

只是,我想知道,主要是出于好奇......有没有办法我可以通过不使用初始化列表构造来做同样的事情? 我想的是(这是一个例子,当然这不起作用)

Matrix::Matrix(int nrows, int ncols) : Matrix_(nrows, std::vector<double>(ncols, 0.)), nr_(nrows), nc_(ncols) {}

谢谢!

1 个答案:

答案 0 :(得分:2)

只需删除:

即可
Matrix::Matrix(int nrows, int ncols) {
    Matrix_ = std::vector<std::vector<double>>(nrows, std::vector<double>(ncols, 0.));
    nc_ = ncols;
    nr_ = nrows;
}

另请注意,您并不真正需要nr_,因为它与Matrix_.size()

的值相同