在2D int向量上使用std :: fill

时间:2018-07-04 05:05:55

标签: c++ vector fill memset

我正在尝试将2D矢量中所有元素的值设置为特定值。据我所知,不能将memset用于向量,例如如何将它们用于数组。因此,我必须使用std :: fill将2D向量中的所有元素设置为特定值。但是,我知道如何将填充用于一维矢量,如下所示。

vector<int> linearVector (1000,0);
fill(linearVector.begin(),linearVector.end(),10);

但是,当我尝试对2D向量执行类似操作时(如下所示),它不起作用。

vector<vector<int> > twoDVector (100,vector <int> (100,0));
fill(twoDVector.begin(),twoDVector.end(),10);

PS:我知道我可以轻松设计一个嵌套的for循环,以将2D向量的元素手动设置为所需的值。但是,在我的程序中这是不可行的,因为2D向量的大小很大,并且还有其他耗时的函数(递归函数)并行发生。

3 个答案:

答案 0 :(得分:3)

这应该对您有帮助

std::vector<std::vector<int> > fog(
A_NUMBER,
std::vector<int>(OTHER_NUMBER)); // Defaults to zero initial value

参考:Initializing a two dimensional std::vector

答案 1 :(得分:1)

您可以这样使用:

fill(twoDVector.begin(), twoDVector.end(), vector<int>(100, 10));

答案 2 :(得分:1)

在C ++ 17中,您可以执行以下操作:

#include <algorithm>
#include <execution>
#include <vector>

//...    

std::for_each(std::execution::par_unseq, nums.begin(), nums.end(),
    [](std::vector<int>& vec) {
    std::for_each(std::execution::par_unseq, vec.begin(), vec.end(),
    [](int& n) {n = 10;});}
);

它似乎是并行的,但不像简单的fill函数那么清晰;)

当然,您可以传递自己的变量,而不用硬编码的10