在C++中,你可以使用以下代码初始化一个一维数组为0:
int myarray[100] = {0};
多维数组有类似的方法吗?还是我被迫使用for循环手动初始化它?
int myarray[100] = {0};
多维数组有类似的方法吗?还是我被迫使用for循环手动初始化它?
你可以完全以相同的方式进行操作。
int marr[10][10] = {0};
编辑:
这是一个 C 语言的解决方案。如果您需要 C++ 的解决方案,可以参考:
int marr[10][10] = {};
这两种解决方案对于通过变量定义大小的数组无效。例如:
int i, j = 10;
int marr[i][j];
要在C++中初始化这样的数组,请使用std::fill
。
const int N = 10; int myarray[N][N] = {0};
- Shreevardhanmemset
!虽然它在这种特定情况下可能有效,但存在太多的陷阱。这是 C++,而不是 C。请使用 std::fill
。 - Baum mit Augenmemset
非常糟糕的观点。 - Baum mit Augen多维数组是由多个数组组成的数组。
相同的一般数组初始化语法适用。
顺便说一下,你可以只写{}
,不需要在里面放置一个明确的0
。
int myarray[10][20] = {};
替代。 - Cheers and hth. - Alf使用向量代替数组可以在声明和其他操作中为您提供更多的灵活性
vector<vector<int> > myarray(rows,vector<int>(columns, initial_value));
std::fill
。std::memset
来初始化2D数组的所有元素,如下所示:int arr[100][100]
memset( arr, 0, sizeof(arr) )
int i=100, j=100;
int arr[i][j]
memset( arr, 0, sizeof(arr) )
这样所有arr
的元素都将被设置为0
。
使用2个vector
容器:
std::vector<std::vector<int>> output(m, std::vector<int>(n, 0));
通过这种方式,可以声明一个大小为(m*n)的2D向量output
,并将向量的所有元素初始化为0。
对于“适当的”多维数组(例如numpy ndarray),有几个可用的库,例如Boost Multiarray。引用示例:
#include "boost/multi_array.hpp"
#include <cassert>
int
main () {
// Create a 3D array that is 3 x 4 x 2
typedef boost::multi_array<double, 3> array_type;
typedef array_type::index index;
array_type A(boost::extents[3][4][2]);
// Assign values to the elements
int values = 0;
for(index i = 0; i != 3; ++i)
for(index j = 0; j != 4; ++j)
for(index k = 0; k != 2; ++k)
A[i][j][k] = values++;
// Verify values
int verify = 0;
for(index i = 0; i != 3; ++i)
for(index j = 0; j != 4; ++j)
for(index k = 0; k != 2; ++k)
assert(A[i][j][k] == verify++);
return 0;
}
另请参阅:高性能C++多维数组
int x = 10, y= 10; int matrix[x][y] = {};
然后二维数组将被初始化为全部为零。
{0}
时,这是错误的。对于其他值,你是正确的,但在这种情况下,{0}
是特殊的。 - Sam Estepint myarray[100] = {0};
会将myarray
的 所有 元素初始化为 0。 - Sam Estepmemset
,最好使用至少std::fill
。 - Cory Kramer