2 维数组初始化列表异常
2 Dimensional array initializer list exception
[异常]
大家好,
我正在尝试为二维数组创建一个 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
没有类型时,也不需要临时变量。
[异常]
大家好, 我正在尝试为二维数组创建一个 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
没有类型时,也不需要临时变量。