多维数组和向量的初始化列表

Initializer lists for multidimensional arrays and vectors

我想为我的向量和数组使用初始化列表。最终,我想初始化一些 class A 的向量数组,但在出现奇怪的编译器错误时我没有到达那里。这是一些代码:

#include <vector>
#include <array>

class A {
    public:
        A(int x_, int y_): x(x_), y(y_) {}
    private:
        int x;
        int y;
};

int main() {
    auto data = std::array<int, 3>{0, 1, 2};
    auto data2 = std::array<A, 3>{ A(0,0), A(1,1), A(2,2) };
    auto data3 = std::vector<std::vector<int>> { {0,0,0}, {1,1,1}, {2,2,2} };
    auto data4 = std::array<std::vector<int>, 3> { {0,0,0}, {1,1,1}, {2,2,2} };
  //auto data5 = std::array<std::vector<A>, 3> { ??? };
}

前三个示例工作得很好。我不明白为什么第四个示例没有 compile(使用 c++17),因为它与第三个示例完全相同。错误是“太多的初始化程序”,我没有得到。我为第五个示例尝试的所有操作均无效。有可能吗?

再戴一副牙套。

auto data4 = std::array<std::vector<int>, 3> { { {0,0,0}, {1,1,1}, {2,2,2} } };

否则第一个列表{0,0,0}被认为是std::array<std::vector<int>, 3 >..

类型的整个对象的初始值设定项

std::array 是一个集合。来自 C++ 14 标准(23.3.2.1 Class 模板数组概述)

2 An array is an aggregate (8.5.1) that can be initialized with the syntax

array<T, N> a = { initializer-list }; 

where initializer-list is a comma-separated list of up to N elements whose types are convertible to T.