2 维数组初始值设定项列表异常

问题描述

[例外]

1

大家好, 我正在尝试为二维数组创建一个 initializer_list 构造函数。 请问有什么帮助吗? ....................

    Matrix(int row,int col,const std::initializer_list<double>& list)
{
    rows = row;
    cols = col;
    std::initializer_list<double>::iterator it; 
    arr = new double* [rows];
    /*double* ptr = arr[k];*/
    int n = 0;
    for (it = list.begin(); it != list.end(); ++it)
    {
        int k = 0;
        if (n == cols)
        {
            k++;
            n = 0;
        }
        n++;
        arr[k][n] = *it;
    }
}

解决方法

您没有分配足够的内存。另请注意,您可能不想在每次迭代中都重置 k,并且如果您想对整个容器执行某些操作,则存在基于范围的循环:

//correct allocation
int n = 0;
int k = 0;
for (auto const& number : list) {
  arr[k][n] = number;
  n++;
  if (n == col) {
    n = 0;
    ++k;
  }
}

在需要变量之前也不需要声明它们。对于迭代器,使用 for(auto it = list.begin(); it != list.end(); ++it)。 当临时变量是函数参数且 rowcol 没有类型时,也不需要临时变量。