C++ - 创建一个带有赋值而不是初始化的 vector <vector<double>>矩阵

标签 c++ vector constructor stl

这是我收到的有关前一个问题的评论之一的后续内容(我认为在这些情况下最好提出一个新问题)。

我创建了一个 Matrix 类作为 vector >,它接受两个整数作为输入(简单地说,矩阵的维度),并创建用零填充的矩阵。

这是标题:

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() 的值相同

关于C++ - 创建一个带有赋值而不是初始化的 vector <vector<double>>矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49984516/

相关文章:

c++ - 创建大量对象指针

C++ Windows : Saving the line of an edit control into a vector of TCHAR

c++ - 遍历 vector 中对象的数据成员

matlab - 如何找到至少包含矢量 B 的一个元素的单元格 A 的矢量?

java - Swing 组件加载时间太长?

c++ - Linux套接字程序只是卡住而没有错误

c++ - QGraphicsTextItem 是否支持垂直居中对齐?

c++ - 使用 toupper() 函数连接时无法打印字符串

c++ - 如何防止类中的类对象尝试在没有默认构造函数的情况下自动构造自身?

constructor - 如何解决 Haxe 中的 'Duplicate Constructor' 错误?