我有一个std::array的二维std::array,我想用0填充它。我发现的唯一解决方案是使用指向第一个元素和sizeof的指针,如下所示:

std::fill(&arr2d[0][0], &arr2d[0][0] + sizeof(arr2d), 0);


尽管它可以工作,但它与我发现的无指针逻辑填充1D std::array的其他方法并不一致,例如以下两种:

std::fill(arr1d.begin(), arr1d.end(), 0);
arr1d.fill(0);


我可以遍历每个数组,如下所示:

for (auto& it : arr2d) {
    it.fill(0);
}


但是一次填充数组似乎会更有效率。是否有用于2D数组的更清洁的方法,还是我受C风格的指针逻辑困扰?

最佳答案

在您的情况下,只需使用{}分配(或初始化)即可:

using arr2d_t = std::array<std::array<unsigned char, 32>, 64>;
arr2d_t arr2d = {}; // all zeroes

arr2d = {}; //ditto

10-08 13:21