我将在成员函数中初始化2D向量,其中输入参数计划被输入到函数参数内的确定索引中.此外,由于安全问题,我不会使用[]运算符来访问成员.如何使用at()函数来访问2D向量的索引,如下所示?
vector<vector<double>> weight;
void Connection::setWeight(const double& value, const double& i, const double& j)
{
// The other scheme except: weight[i][j] = value;
}
Run Code Online (Sandbox Code Playgroud)
Iva*_*rop 10
为了过早优化而冒险被冒险,并且由于它没有真正回答所提出的问题,我仍然想提醒一下这种方法中的一个严重问题.
像任何多维数组一样,向量向量不是连续的,这使得它的性能特征非常糟糕,因为缺乏空间局部性和相关的高速缓存未命中.
通过使用方便的二维数组接口包装一维数组,您可以轻松解决问题.
template <class T>
class MyArray2D
{
std::vector<T> data;
size_t sizeX, sizeY;
public:
const T& at(int x, int y) const { return data.at(y + x * sizeY); }
T& at(int x, int y) { return data.at(y + x * sizeY); }
// wrap other methods you need of std::vector here
};
Run Code Online (Sandbox Code Playgroud)
请注意,上面的代码是动态编写的,并未编译.不过,我相信你已经有了这个主意.
也可以看看:
你可以使用at两次.另外要注意,如果i和j有指标,他们真的不应该double.
void Connection::setWeight(const double& value, const size_t& i, const size_t& j)
{
weight.at(i).at(j) = value;
}
Run Code Online (Sandbox Code Playgroud)