是否可以使用带有2d C风格数组的std :: fill?

时间:2014-08-06 10:46:29

标签: c++

假设我有:unsigned char my2darray[A][B];

是否可以使用std::fill将2d数组的所有值设置为非0值?

我知道可以使用向量,但这是性能关键代码,我无法负担动态分配。不幸的是,不允许使用C ++ 11。

目前代码中使用的是memset(my2darray, 0x12, sizeof(my2darray));,但我希望尽可能将所有memset替换为std::fill,因为数组的类型将来可能会成为一个类。

适用于任何类型的答案,而不仅仅是字符,非常感谢。

2 个答案:

答案 0 :(得分:4)

是的,因为2d数组仍然是一系列元素,它们被分配为连续的内存块。

    std::fill (
      &my2darray[0][0],
      &my2darray[0][0] + sizeof(my2darray) / sizeof(my2darray[0][0]),
      none_zero_value);

答案 1 :(得分:2)

如果std::fill_n是您的选项,并且您不想处理阵列上的sizeof操作,则可以使用以下命令:

std::fill_n(*my2darray,A*B,my_val)