将矢量(2D数组)的向量重置为零

时间:2015-09-23 17:57:21

标签: c++ c++11 vector

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

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

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

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

注意:不使用for循环的意思是我不想使用v [i] [j]这样的下标迭代所有2D元素他们的价值。

2 个答案:

答案 0 :(得分:2)

  

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

好吧,要么显式循环,要么使用隐式循环的东西。显式循环没有错:

for (auto& sub : v) {
    std::fill(sub.begin(), sub.end(), 0);
}

我想技术上如果你想避免使用循环:

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

答案 1 :(得分:1)

我知道我会得到这个答案,但我相信没有什么比这更快了:

for(auto& x : v) memset(&x[0],0,sizeof(int)*x.size());

memset经过高度优化,设置为0。