在C ++中缩小2D向量

时间:2019-05-05 20:13:17

标签: c++ matrix machine-learning 2d-vector

我想进入神经网络,这就是为什么我想编写自己的C ++矩阵类。问题是我对C ++还是很陌生,为了保持简单,我想使用std :: vector而不是2D-Array。目前,我的课程看起来像

class Matrix {

private:

    std::vector<std::vector<float>> data_;

public:

    Matrix(const int& rows, const int& columns);
};

我知道std :: vector会产生一些开销,但是我想通过仅将矢量缩小到所需的大小来使开销尽可能小:

Matrix::Matrix(const int &rows, const int &columns) {
    this->data_ = std::vector<std::vector<float>>{};
    this->data_.resize(rows);
    for (auto col : this->data_) {
        col.resize(columns);
    }

}

我的问题是:这种收缩是否按照我的预期工作,或者有更好的方法呢?

非常感谢!

1 个答案:

答案 0 :(得分:2)

缩小表示缩小。给定构造函数的上下文,我认为您的意思是放大

您的解决方案并不完全可行,因为您的for循环会调整您要调整大小的向量的副本。

不太重要,但值得一提:此外,您将不必要的空向量副本用于初始化data_。实际上,当您输入构造函数的主体时,所有成员都已被构造。最后,也没有必要使用this->访问成员,除非参数名称存在歧义:

Matrix::Matrix(const int &rows, const int &columns) {
    data_.resize(rows);
    for (auto& col : data_) {   // note the & to resize the vector in the vector 
        col.resize(columns);
    }
}

附录:

您还可以为成员的构造函数提供显式参数:

Matrix::Matrix(const int &rows, const int &columns) : data_(rows) {
    for (auto& col : data_) {
        col.resize(columns);
    }
}

如果您喜欢简洁,甚至可以申请:

Matrix::Matrix(const int &rows, const int &columns) : data_(rows, vector<float>(columns)) {
}