Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何从初始值设定项列表中初始化2D数组 typedef无符号字符u8; 模板 类矩阵{ 公众: 矩阵(常数std::初始值设定项列表&l); 私人: std::阵列arr; }; 模板 矩阵::矩阵(const std::初始值设定项_list&l):arr(l){_C++_Initializer List - Fatal编程技术网

C++ 如何从初始值设定项列表中初始化2D数组 typedef无符号字符u8; 模板 类矩阵{ 公众: 矩阵(常数std::初始值设定项列表&l); 私人: std::阵列arr; }; 模板 矩阵::矩阵(const std::初始值设定项_list&l):arr(l){

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列表引用。它是一个轻量级对象,

错误C2664: 'std::array,2>::array(std::array,2> &&)“:无法将参数1从常量转换为常量” std::初始值设定项列表>“to”常量 标准::数组,2>&'


如何从2D
std::initializer\u list
初始化2D
std::array
(或C数组)中初始化2D
std::array

std::array
是一个聚合。这意味着您可以从带括号的init列表中初始化它,如

还请注意,您不必传递by
std::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
}