无需迭代即可填充二维std :: array的STL方法是什么?

rob*_*bie 0 c++ arrays stl multidimensional-array c++11

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

std::fill(&arr2d[0][0], &arr2d[0][0] + sizeof(arr2d), 0);
Run Code Online (Sandbox Code Playgroud)

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

std::fill(arr1d.begin(), arr1d.end(), 0);
arr1d.fill(0);
Run Code Online (Sandbox Code Playgroud)

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

for (auto& it : arr2d) {
    it.fill(0);
}
Run Code Online (Sandbox Code Playgroud)

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

T.C*_*.C. 5

就您而言,只需分配(或初始化){}

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

arr2d = {}; //ditto
Run Code Online (Sandbox Code Playgroud)