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

using std::fill on a 2D int vector

我正在尝试将 2D 向量中所有元素的值设置为特定值。据我所知,不能像将 memset 用于数组那样将 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循环来手动将二维向量的元素设置为我想要的值。但是,这在我的程序中是不可行的,因为二维向量的大小非常大,并且还有其他并行发生的耗时函数(递归函数)。

你可以这样使用:

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

在 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;});}
);

好像是平行的,但不像简单的填充函数那样清晰;)

当然你可以传递你自己的变量而不是硬编码10

这应该对你有帮助

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

参考:Initializing a two dimensional std::vector