收缩C+中的二维向量+; 我想进入神经网络,这就是为什么我想编写我自己的C++矩阵类的原因。问题是我对C++还很新,而且要保持简单,我想使用一个STD::vector代替2D数组。现在我的班级看起来像 class Matrix { private: std::vector<std::vector<float>> data_; public: Matrix(const int& rows, const int& columns); }; 类矩阵{ 私人: std::矢量数据; 公众: 矩阵(常数整型&行、常数整型&列); };

收缩C+中的二维向量+; 我想进入神经网络,这就是为什么我想编写我自己的C++矩阵类的原因。问题是我对C++还很新,而且要保持简单,我想使用一个STD::vector代替2D数组。现在我的班级看起来像 class Matrix { private: std::vector<std::vector<float>> data_; public: Matrix(const int& rows, const int& columns); }; 类矩阵{ 私人: std::矢量数据; 公众: 矩阵(常数整型&行、常数整型&列); };,c++,matrix,machine-learning,2d-vector,C++,Matrix,Machine Learning,2d Vector,我知道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_) {

我知道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);
    }

}
Matrix::Matrix(常量int&行、常量int&列){
这->数据=标准::向量{};
此->数据大小调整(行);
用于(自动列:此->数据){
列大小调整(列);
}
}
我的问题是:这种收缩是按我的预期方式进行的,还是有更好的方法

非常感谢

收缩意味着变小。考虑到构造器的上下文,我认为你的意思是放大

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

不太重要,但值得一提的是:此外,您创建了一个不必要的空向量副本来初始化
数据。事实上,当您进入构造函数的主体时,所有的成员都已经构造好了。最后,也不必使用
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)) {
}
Matrix::矩阵(常量int&行,常量int&列):数据(行,向量(列)){
}

我想进入神经网络,这就是为什么我想编写我自己的C++矩阵类。为什么不使用一个已经存在的呢?(同样,如果我要写一篇文章,我会使用向量而不是向量,将二维索引转换为一维索引是一个相当简单的数学问题),因为我想了解它们到底是如何工作的。即使我的实现不是完美的(也不是:P),我还是想了解一切是如何工作的。我已经考虑过使用一维向量并转换索引。谢谢你的提示!