在 C++ 中缩小二维向量
Shrink a 2D-Vector in C++
我想进入神经网络,这就是为什么我想编写自己的 C++ 矩阵 class。问题是我对 C++ 也很陌生,为了简单起见,我想使用 std::vector 而不是二维数组。目前我的 class 看起来像
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);
}
}
我的问题是:这种缩小是否按我预期的方式工作,还是有更好的方法?
非常感谢!
缩小意味着变小。鉴于构造函数的上下文,我认为你的意思是 enlarging。
您的解决方案并不完全正确,因为您的 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)) {
}
我想进入神经网络,这就是为什么我想编写自己的 C++ 矩阵 class。问题是我对 C++ 也很陌生,为了简单起见,我想使用 std::vector 而不是二维数组。目前我的 class 看起来像
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);
}
}
我的问题是:这种缩小是否按我预期的方式工作,还是有更好的方法?
非常感谢!
缩小意味着变小。鉴于构造函数的上下文,我认为你的意思是 enlarging。
您的解决方案并不完全正确,因为您的 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)) {
}