C++ 可以将std::fill与2d C样式数组一起使用吗?

C++ 可以将std::fill与2d C样式数组一起使用吗?,c++,C++,假设我有:无符号字符my2darray[A][B] 是否可以使用std::fill将2d数组的所有值设置为非0值 我知道可以使用向量,但这是性能关键的代码,我负担不起动态分配。不幸的是,不允许使用C++11 目前代码中使用的是memsetmy2darray,0x12,sizeofmy2darray;但如果可能的话,我想用std::fill替换所有memset,因为数组的类型将来可能会成为一个类 答案适用于任何类型,而不仅仅是字符,请欣赏。是的,因为2d数组仍然是作为连续内存块分配的元素序列

假设我有:无符号字符my2darray[A][B]

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

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

目前代码中使用的是memsetmy2darray,0x12,sizeofmy2darray;但如果可能的话,我想用std::fill替换所有memset,因为数组的类型将来可能会成为一个类


答案适用于任何类型,而不仅仅是字符,请欣赏。

是的,因为2d数组仍然是作为连续内存块分配的元素序列

    std::fill (
      &my2darray[0][0],
      &my2darray[0][0] + sizeof(my2darray) / sizeof(my2darray[0][0]),
      none_zero_value);
如果是一个选项,并且您不想在阵列上处理sizeof操作,则可以使用以下方法:

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

那么std::array呢?@BaummitAugen注意当前的memset将用2填充数组 071 690 107当my2darray为int@Erbureth是的,更多的理由是不要使用它!!!实际上,我代码中的数组是字节。我只是把它改成int作为例子。我将其编辑为char。@WhozCraig它看起来与@NeilKirk中的答案相同链接的答案是char.sizeof,在该示例中有效。对于这个问题,我应该是&my2darray[0][0]+A*B,或者是sizeofmy2darray/sizeofmy2darray[0][0],由您选择。如果my2darray`实际上是类型*[B]而不是fixed,我更喜欢前者。@WhozCraig我认为它应该是一个除法@阵列固定后,EricZ除法工作正常。当数组仅通过行指针可用时,它将不可用,因此我更喜欢更简单的数学,这在两种情况下都适用。@WhozCraig如果my2darray是原始指针,&my2darray[0][0]是语法错误。为什么*my2darray?难道不是我的2D阵列吗?。。。不应该,;但是,值得一提的是,与一维阵列相比,二维阵列的情况有所不同