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

时间:2016-10-03 08:35:35

标签: c++ c++11 vector stl 2d-vector

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

2 个答案:

答案 0 :(得分:4)

您应该将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

答案 1 :(得分:1)

您可以使用标准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的多个元素。