C - 创建矢量< vector< double>>矩阵具有分配而不是inizializ

C++ - Create a vector<vector<double>> matrix with assignment and not inizialization

本文关键字:gt lt 分配 inizializ double 创建 vector      更新时间:2023-10-16

这是我收到的以前问题的评论之一的后续(我会收集到这些情况下提出一个新问题(。

我创建了一个矩阵类作为vector&lt;vector&lt;double>>,它接受两个整数作为输入(简单地,矩阵的尺寸(,并创建填充零的矩阵。

这是标题:

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) {}

只是,我想知道,主要是出于好奇...是否有任何方法可以通过不使用初始化列表构造来做到这一点?我正在考虑类似的事情(这是一个例子,这当然不起作用(

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

谢谢!

只需删除:

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()

相同