在C++中对二维数组进行归零.循环需要2个吗
Zero a 2d array in C++. Do I need 2 for loops?
如何在C++中对2D数组清零?我需要两个for循环吗?
来自其他高级语言,我想知道C++为什么不将数组初始化为有意义/合理的默认值?我是否总是需要声明一个数组,然后立即将其"清零"?
C++语言试图遵循"不为不使用的东西付费"的原则。它不会将基本类型初始化为任何默认值,因为您可能不希望发生这种情况。在任何情况下,该语言都为您提供了明确请求此类初始化的机会。
在声明的时候,你可以使用初始化器,只需执行
int array[10][20] = {};
或者,对于动态分配的阵列
int (*array)[20] = new int[10][20]();
这将给出一个初始化为零的数组。无需循环。
但是,如果您想将现有数组清零,那么您确实必须使用更精细的方法。在整数类型的情况下,一个好的旧memset
将起作用。对于指针或浮点类型,情况通常更为复杂。memset
可能工作,也可能不工作,这取决于实现定义的属性。在任何情况下,标准库都可以通过提供std::fill
这样的循环包装器来帮助您减少显式循环的数量。
取决于创建方式。
二维向量,是的,两个用于循环(因为整数是基元类型-类将调用默认的ctor)。
二维阵列?不可以,您可以同时使用memset
或bzero
,因为无论使用malloc
还是new
,内存都是连续的。
您可以简单地使用memset
将零放在任何位置。此处记录
memset(pointer, value_to_put, num_bytes);
所以在这种情况下,你会有一些类似的东西
memset(myArray, 0, sizeof(arrayElement) * width * height);
只有标量类型的C样式数组才可以选择在不初始化的情况下创建。要将这样的数组初始化为零,只需提供一个空的初始化器:
int a[3][3] = {}; // 3x3 zeroes
由于您来自"其他高级语言",请考虑2D数据的低级别类型(有多个矩阵库:boost.ublas和Eigen可能是最受欢迎的,当然boost中也有多个阵列)
相关文章:
- 有没有一种快速的方法可以将类的所有静态成员归零?
- 我可以说服自动生成的构造函数将我的 POD 类成员归零吗?
- 当函数耗尽时结构被归零?
- 将结构的所有元素归零的最佳方法
- std::map<whatever,double>会自动将值归零吗?
- 我是否需要手动将 PCREDENTIAL 归零.凭据blob
- 在C++中对二维数组进行归零.循环需要2个吗
- 是否应始终在析构函数中清除/归零成员数据
- 当我的编译器不符合标准时,如何将数组成员归零
- 我怎样才能只将类的填充字节归零
- 如何在 O(1) 中将数组归零
- 如何将新数组归零
- 如何使用opencv库将3D矩阵的元素归零
- 将mmap偏移量的最后12位归零
- 指向"raw"资源的指针是否应该在析构函数中归零?
- 将现有数组归零的最快方法是什么?
- 将多维数组的一部分归零
- 为什么将结构归零会导致对虚基类成员的访问丢失?
- 这是将数组归零最快的方法
- 使用memset对派生结构体进行归零