假设我要为2d数组中的所有元素分配5。首先我尝试了memset
int a[3][4];
memset(a, 5, sizeof a);
和
int a[3][4];
memset(a, 5, sizeof(a[0][0])*3*4);
但是结果是一样的all the elements becomes 84215045
。
然后我尝试使用fill_n
,它显示积聚失败。看来fill_n
不能与二维数组。
那么,有没有一种快速的方法可以将2d数组中的所有元素设置为某个值?在C ++中?
********************************************************************************
UPDATE
感谢@paddy的答案。其实fill_n
做的工作。我使用它的方式就像这样,无法通过我的编译器建立。
fill_n(a,3*4,5);
@paddy的答案是正确的,我们可以通过这种方式将其用于二维数组。
fill_n(a[0],3*4,5);
然后我尝试了更多,我发现我们实际上可以使用它来处理3d数组,但是应该像这样。说吧a[3][4][5]
。
fill_n(a[0][0],3*4*5,5);
不幸的是,memset
仅在将每个字节设置为一个值时有用。但这在您要设置字节组时不起作用。由于2D数组的内存布局,实际上可以使用第一个值std::fill_n
或std::fill
从第一个值开始:
std::fill_n( a[0], 3 * 4, 5 );
std::fill( a[0], a[3], 5 ); // Note a[3] is one past the end of array.
取决于您的编译器,类似的东西甚至可能被矢量化以更快地执行。但是即使没有这些,您也不必担心速度-速度std::fill
足够快。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句