假设我有:unsigned char my2darray[A][B];
是否可以使用std::fill
将2d数组的所有值设置为非0值?
我知道可以使用向量,但这是性能关键代码,我无法负担动态分配。不幸的是,不允许使用C ++ 11。
目前代码中使用的是memset(my2darray, 0x12, sizeof(my2darray));
,但我希望尽可能将所有memset
替换为std::fill
,因为数组的类型将来可能会成为一个类。
适用于任何类型的答案,而不仅仅是字符,非常感谢。
答案 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)