如何通过at()函数访问2D向量的索引?

Rob*_*ist 4 c++ vector c++11

我将在成员函数中初始化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)

请注意,上面的代码是动态编写的,并未编译.不过,我相信你已经有了这个主意.

也可以看看:


Cor*_*mer 9

你可以使用at两次.另外要注意,如果ij有指标,他们真的不应该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)

  • `size_t` 实际上是 `unsigned int`,因为你不能使用负索引。 (2认同)