假设我想将 5 分配给二维数组中的所有元素。首先我尝试了 memset
int a[3][4];
memset(a, 5, sizeof a);
和
int a[3][4];
memset(a, 5, sizeof(a[0][0])*3*4);
但是同样的结果是所有的元素都变成了84215045
。
然后我尝试使用 fill_n
,它显示构建失败。 fill_n
似乎无法处理二维数组。
那么有没有什么快速的方法可以让二维数组中的所有元素都为某个值呢?在 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
仅对将每个字节 设置为一个值有用。但是当你想设置字节组时,这将不起作用。由于二维数组的内存布局,实际上可以从第一个值开始使用 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
已经足够快了。
关于c++ - 使二维数组中的所有元素在 C++ 中成为某个非零值的快速方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35423152/