如何在C++中初始化二维数组的数组(在下面的代码中定义)?
#include <iostream>
#include <array>
typedef int arr3by6Int[3][6];
typedef arr3by6Int arr3xarr3by6Int[3];
void print3by6(arr3by6Int arr)
{
for(int i = 0; i < 3; i++)
{
for(int j = 0; j < 6; j++)
{
std::cout << arr[i][j] << " ";
}
std::cout << std::endl;
}
}
int main(int argc, char const *argv[])
{
arr3by6Int a = {
{1,2,3,4,5,6},
{0,0,0,0,0,0},
{2,2,2,2,2,2}
};
arr3by6Int b = {
{2,2,3,4,5,6},
{0,0,0,0,0,0},
{2,2,2,2,2,2}
};
arr3by6Int c = {
{3,2,3,4,5,6},
{0,0,0,0,0,0},
{2,2,2,2,2,2}
};
arr3xarr3by6Int d = { a, b, c };
for(int i = 0; i < 3; i++)
{
print3by6(d[i]);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我收到这些错误:
$ g++ -std=c++11 arrays.cpp -o arrays
arrays.cpp: In function ‘int main(int, const char**)’:
arrays.cpp:39:32: error: array must be initialized with a brace-enclosed initializer
arrays.cpp:39:32: error: array must be initialized with a brace-enclosed initializer
arrays.cpp:39:32: error: array must be initialized with a brace-enclosed initializer
你#include <array>的代码中有,所以你应该使用它.更改要使用的类型std::array<>:
typedef std::array<std::array<int, 6>, 3> arr3by6Int;
typedef std::array<arr3by6Int, 3> arr3xarr3by6Int;
Run Code Online (Sandbox Code Playgroud)
然后,更新初始化列表以匹配:
arr3by6Int a = {
std::array<int, 6>{1,2,3,4,5,6},
std::array<int, 6>{0,0,0,0,0,0},
std::array<int, 6>{2,2,2,2,2,2}
};
arr3by6Int b = {
std::array<int, 6>{2,2,3,4,5,6},
std::array<int, 6>{0,0,0,0,0,0},
std::array<int, 6>{2,2,2,2,2,2}
};
arr3by6Int c = {
std::array<int, 6>{3,2,3,4,5,6},
std::array<int, 6>{0,0,0,0,0,0},
std::array<int, 6>{2,2,2,2,2,2}
};
Run Code Online (Sandbox Code Playgroud)
在大多数情况下,当在表达式中使用时,"C style"数组类型的对象将降级为指向数组的第一个元素的指针.您的初始化方法d是尝试使用指针值初始化3个矩阵,这将无法正常工作.
A std::array是一个类,所以它不会以这种方式降级.