重置二维向量所有值的最快方法?
Fastest way to reset all the value of a 2-D vector?
如何在不使用循环和保持向量大小的情况下将 vector<vector<int>>
的所有值重置为 0。
您应该将 std::fill
与 for
循环或 std::for_each
:
结合使用
for (auto &v: vec) {
std::fill(v.begin(), v.end(), 0);
}
此处 std::fill
可能会回退到对 std::memset
的单个调用(具有良好的编译器和优化标志),但您需要 for
用于第一个维度。
由于二维 std::vector
不是单个内存块,因此无法立即将所有内容重置为 0
。
您可以使用标准 std::fill
and std::for_each
算法:
std::vector<std::vector<int>> vec;
// Iterate over the first dimension of vectors...
std::for_each(vec.begin(), vec.end(), [](std::vector<int>& inner_vec)
{
// ...fill every inner vector with zeros.
std::fill(inner_vec.begin(), inner_vec.end(), 0);
});
请注意,这些算法在内部是通过循环实现的:没有迭代就无法立即立即设置 std::vector
的多个元素。
如何在不使用循环和保持向量大小的情况下将 vector<vector<int>>
的所有值重置为 0。
您应该将 std::fill
与 for
循环或 std::for_each
:
for (auto &v: vec) {
std::fill(v.begin(), v.end(), 0);
}
此处 std::fill
可能会回退到对 std::memset
的单个调用(具有良好的编译器和优化标志),但您需要 for
用于第一个维度。
由于二维 std::vector
不是单个内存块,因此无法立即将所有内容重置为 0
。
您可以使用标准 std::fill
and std::for_each
算法:
std::vector<std::vector<int>> vec;
// Iterate over the first dimension of vectors...
std::for_each(vec.begin(), vec.end(), [](std::vector<int>& inner_vec)
{
// ...fill every inner vector with zeros.
std::fill(inner_vec.begin(), inner_vec.end(), 0);
});
请注意,这些算法在内部是通过循环实现的:没有迭代就无法立即立即设置 std::vector
的多个元素。