问题描述
[例外]
大家好, 我正在尝试为二维数组创建一个 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)
。
当临时变量是函数参数且 row
和 col
没有类型时,也不需要临时变量。