-1

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

4

2 回答 2

4

您应该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一次将所有内容重置为。

于 2016-10-03T08:41:37.410 回答
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请注意,这些算法在内部是通过循环实现的:没有迭代就无法立即设置 a 的多个元素。

于 2016-10-03T08:42:38.320 回答