在 2D 整数矢量上使用 std::fill
using std::fill on a 2D int vector
我正在尝试将 2D 矢量中所有元素的值设置为特定值。据我所知,不能像将memset用于数组一样将memset用于向量。因此,我必须使用 std::fill 将 2D 矢量中的所有元素设置为特定值。但是,我知道如何使用填充 1D 矢量,如下所示。
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 矢量的大小非常大,并且还有其他耗时的函数(递归函数(并行发生。
在 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
参考:初始化二维标准::向量
你可以这样使用:
fill(twoDVector.begin(), twoDVector.end(), vector<int>(100, 10));
相关文章:
- 使用std::multimap迭代器创建std::list
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- 如何在使用 make_unique<T[]>() 制作的模板类型数组上使用 std::fill?
- 我不能将 'fill' std::vector 构造函数与 unique_ptrs 一起使用
- 在 2D 整数矢量上使用 std::fill
- 使用 'std::generate' 或 'std::fill' 来填充 'arma::mat'
- 为什么 std::fill 使用 ForwardIterator,而不是 OutputIterator?
- 将静态参数克隆到 std::fill 导致链接器失败
- 如何使用 std:fill 为 C 数组的特定范围设置值
- std::fill, std::copy 是专门用于 std::vector 的<bool>吗?
- 将 emplace 与 std::fill 等算法一起使用
- 为什么 std::generate 将与 lambda 生成器一起使用,而 std::fill 则不能
- 为什么我们不能像使用 1D 和 2D 数组一样使用 std::fill()?
- 使 std::fill 调用为不合格的运算符重载
- c++11 使用 std::fill 来填充 2D 动态分配的数组
- 使用 std::fill 用递增的数字填充矢量
- 如何在std::fill()中使用c++的lambdas局部变量