我有一个2d,我想将元素设置为零而不循环所有元素
int a[100][200];
Run Code Online (Sandbox Code Playgroud)
我无法在声明点初始化它们.
bta*_*bta 25
尝试
int a[100][200] = {{0}};
Run Code Online (Sandbox Code Playgroud)
如果初始化一些(但不是全部)元素,其余元素将初始化为零.在这里,您只是显式初始化第一个子数组的第一个元素,编译器正在处理其余部分.
Ale*_*ler 13
尝试 memset(a,0,sizeof(a));
这只是用0字节覆盖数组使用的内存.除非您确实知道自己的操作,否则不要对用户定义的数据类型执行此操作.还有std::fill和std::fill_n,这是比较C++ ISH(但不是在这里最简单的方法).
C++ 允许通过基本元素指针完全迭代多维数组。所以你可以使用std::fill并传递第一个非数组元素
std::fill(a[0] + 0, a[99] + 100, 0);
Run Code Online (Sandbox Code Playgroud)
在 C 中,这在形式上是不允许的,您需要分别迭代每个子数组,因为迭代超出第一个子数组的后尾指针会导致 C 中的未定义行为。尽管如此,实际上这仍然有效。
小智 5
对于 C++,您可以使用算法头文件中的 std:fill 方法。
int a[x][y];
std::fill(a[0], a[0] + x * y, 0);
Run Code Online (Sandbox Code Playgroud)
所以,在你的情况下,你可以使用这个:
int a[100][200];
std::fill(a[0], a[0] + 100 * 200, 0);
Run Code Online (Sandbox Code Playgroud)
当然,可以为任何 int 值更改 0。
| 归档时间: |
|
| 查看次数: |
38137 次 |
| 最近记录: |