我正在使用矢量矢量来模拟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元素他们的价值。
答案 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。