将向量的向量(二维数组)重置为零

Ric*_*ich 2 c++ vector c++11

我正在使用向量的向量来模拟二维数组。为了重用这个二维数组,有时我需要将其所有元素重置为零或某个默认值。我知道对于一个简单的一维向量我可以这样做:

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

如何有效地做到这一点vector<vector<int>>?我希望找到一个不使用 for 循环但更类似于某些memset变体的解决方案。我也不想进行任何内存分配和释放,因为我的目的是重用现有分配的内存。

请注意,我假设每个向量的大小是固定的并且我知道:vector<vector<int>> v(const_max_size, vector<int> (const_max_size, 0));。如何将v的元素重置为零?

注意:我不使用for循环的意思是我不想使用 v[i][j] 等下标迭代所有 2D 元素来为其分配值。

Bar*_*rry 5

我希望找到一个不使用for循环的解决方案......

好吧,要么显式执行循环,要么使用隐式循环的东西。显式循环没有任何问题:

for (auto& sub : v) {
    std::fill(sub.begin(), sub.end(), 0);
}
Run Code Online (Sandbox Code Playgroud)

我想从技术上来说,如果你想避免循环,你可以使用:

std::for_each(v.begin(), v.end(),
              [](auto& sub) {
                  std::fill(sub.begin(), sub.end(), 0);
              });
Run Code Online (Sandbox Code Playgroud)