我以为我已经为我的initializer-list constructor
正确设置了一切,但显然,还有一些关于它的事情。它应该是我的overloaded constructor
Matrix class
从这种类型的输入中创建Matrix
:Matrix d = {{1,3}, {5,9};
我知道我的一个定义不正确,但我可以' t解读哪一个。
Matrix::Matrix(const i_list & list){
uint rows = list.size();
uint cols = list.begin()->size();
int i = 0;
mat = new double*[rows];
for(uint m = 0; m < rows; m++){
mat[m] = new double[rows];
}
for(uint n = 0; n < rows; k++){
for(uint w = 0; w < cols; w++){
mat[n][w] = *(list.begin()[n].begin[w] + i);
i++;
}
}
答案 0 :(得分:2)
行mat[n][w] = *(list.begin()[n].begin[w] + i);
基本上是无稽之谈。您可以循环输入,这意味着您不需要单独的循环。
Matrix::Matrix(const i_list & list){
mat = new double*[list.size()];
for(auto r = list.begin(); r != list.end(); ++r){
auto row = mat[r - list.begin()] = new double[r->size()];
for(auto c = r->begin(); c != r->end(); ++c){
row[c - r->begin()] = *c;
}
}
}
但应该做的是将mat
从**double
更改为std::vector<std::vector<double>>
,此时它会变为:
Matrix::Matrix(const i_list & list) : mat(list) {}