在C 中收缩2D矢量

Shrink a 2D-Vector in C++

本文关键字:2D 矢量      更新时间:2023-10-16

我想进入神经网络,这就是为什么我想编写自己的C 矩阵类。问题在于,我对C 也很新,并且要保持简单,我想使用std :: vector而不是2D阵列。目前我的班级看起来像

class Matrix {
private:
    std::vector<std::vector<float>> data_;
public:
    Matrix(const int& rows, const int& columns);
};

我知道一个std ::向量有点开销,但是我想将其保持在最小的开销中,而仅将矢量缩小到所需的确切尺寸:

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

我的问题是:这是按照我的意图方式缩小的工作,还是有更好的方法?

谢谢!

缩小表示使较小的。考虑到构造函数的上下文,我认为您的意思是扩大。

您的解决方案不是完全可以的,因为您的for -LOOP调整了要调整大小的向量的副本。

不太重要,但值得一提的是:此外,您还制作一个不必要的空矢量副本来初始化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)) {
}