最快的方法来重置所有的2-D向量的值

Fastest way to reset all the value of a 2-D vector?

本文关键字:2-D 向量 方法      更新时间:2023-10-16

如何在不使用循环并保持vector大小的情况下将vector<vector<int>>的所有值重置为0

您应该将std::fillfor循环或std::for_each组合使用:

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

在这里,std::fill可能会退回到对std::memset的单个调用(具有不错的编译器和优化标志),但是您需要第一维的for

由于2-D std::vector不是单个内存块,因此无法立即将所有内容重置为0

可以使用标准的std::fillstd::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的多个元素,而不需要迭代。