C++ 如何从初始值设定项列表中初始化2D数组 typedef无符号字符u8; 模板 类矩阵{ 公众: 矩阵(常数std::初始值设定项列表&l); 私人: std::阵列arr; }; 模板 矩阵::矩阵(const std::初始值设定项_list&l):arr(l){
错误C2664: 'std::array,2>::array(std::array,2> &&)“:无法将参数1从常量转换为常量” std::初始值设定项列表>“to”常量 标准::数组,2>&'C++ 如何从初始值设定项列表中初始化2D数组 typedef无符号字符u8; 模板 类矩阵{ 公众: 矩阵(常数std::初始值设定项列表&l); 私人: std::阵列arr; }; 模板 矩阵::矩阵(const std::初始值设定项_list&l):arr(l){,c++,initializer-list,C++,Initializer List,错误C2664: 'std::array,2>::array(std::array,2> &&)“:无法将参数1从常量转换为常量” std::初始值设定项列表>“to”常量 标准::数组,2>&' 如何从2Dstd::initializer\u list初始化2Dstd::array(或C数组)中初始化2Dstd::array?std::array是一个聚合。这意味着您可以从带括号的init列表中初始化它,如 还请注意,您不必传递bystd::initlizer\u列表引用。它是一个轻量级对象,
如何从2D
std::initializer\u list
初始化2Dstd::array
(或C数组)中初始化2Dstd::array
?std::array
是一个聚合。这意味着您可以从带括号的init列表中初始化它,如
还请注意,您不必传递bystd::initlizer\u列表
引用。它是一个轻量级对象,通过值传递很好,它不会复制底层元素
您可以将类更改为将2d数组作为参数,这样您就可以直接初始化
arr
,但因为这样,您的代码会变成一个大括号地狱
template <u8 N>
matrix<N>::matrix(std::initializer_list<std::initializer_list<int>> l)
{
u8 counter = 0;
for (auto row : l)
std::copy(row.begin(), row.end(), arr[counter++].begin());
}
typedef无符号字符u8;
模板
类矩阵{
公众:
矩阵(std::数组l);
私人:
std::阵列arr;
};
模板
矩阵::矩阵(std::数组l):arr(l){}
int main()
{
std::array arr{{{{{1,2}},{{{3,4}}};//这就是初始化2d std::array的方法
矩阵m={{{{{1,2}},{{3,4};//我们在这里还需要一个大括号,因为我们正在初始化矩阵,它需要自己的大括号
}
最简单的方法就是不要这样做。将一个std::array
作为类成员,并假设它有多个维度代码>和非矩阵m={1,2,3,4}代码>我认为一旦它成为初始值设定项列表
,您就无法进行聚合初始化。
std::array<int, 4> foo = {1,2,3,4};
template <u8 N>
matrix<N>::matrix(std::initializer_list<std::initializer_list<int>> l)
{
u8 counter = 0;
for (auto row : l)
std::copy(row.begin(), row.end(), arr[counter++].begin());
}
typedef unsigned char u8;
template <u8 N>
class matrix {
public:
matrix(std::array<std::array<int, N>, N> l);
private:
std::array<std::array<int, N>, N> arr;
};
template <u8 N>
matrix<N>::matrix(std::array<std::array<int, N>, N> l) : arr(l) {}
int main()
{
std::array<std::array<int, 2>, 2> arr{{{{1, 2}}, {{3, 4}}}}; // this is how you have to initialize a 2d std::array
matrix<2> m = {{{{{1, 2}}, {{3, 4}}}}}; // we need one more brace here since we are initialzing the matrix, which needs its own brace
}