初始化二维数组时,我们可以这样做:
int data[2][2] = {{1, 2}, {3, 4}}; // OK
我们也可以使用
int data[2][2] = {1, 2, 3, 4}; // OK
当使用数组类而非基础类型时,这是可行的,因为二维数组仍然是一段连续的内存块。
array<array<int, 2>, 2> data = {1, 2, 3, 4}; // OK
这是有道理的,因为数组类没有任何额外的数据,并且最终也成为一块连续的内存。
但二维列表不起作用:
array<array<int, 2>, 2> data = {{1, 2}, {3, 4}}; // Error
我也可以进行初始化。
vector<array<int, 2>> data = {{1, 2}, {3, 4}}; // OK
但是找不到任何初始化的方法:
array<vector<int>, 2> = ????
我的问题是:
这是基本设计上的原因吗?(我猜测与编译时和运行时发生的事情有关)还是这只是我使用的编译器(GCC)的实现决策?
CWG 1270修订版
之前,我从这里给出的示例中了解到的:https://en.cppreference.com/w/cpp/container/array 显然,曾经需要1维。 - Brandonvector
有一个显式构造函数,因此如果您有一个向量数组,则必须为每个子元素编写vector{1, 2}
等。 - M.M