多维数组和向量的初始化列表
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.
我想为我的向量和数组使用初始化列表。最终,我想初始化一些 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.