c – 如何使用2维initializer_list进行初始化?
作者:互联网
我知道,矢量类是按以下方式初始化的:
Vector::Vector(initializer_list<double> lst)
:size{static_cast<int>(lst.size())},elem{new double[static_cast<int>(lst.size())]}
{
copy(lst.begin(),lst.end(),elem);
}
这是我的Matrix类:
class Matrix{
private:
int row;
int col;
double elem**
public:
//Default Constructor:
Matrix(int row,int col);
//Initialized list constructor:
Matrix(initializer_list<initializer_list<double>> lst);
我想,我应该在初始化列表中使用初始化的lis来创建初始化矩阵.我怎么能从语法的角度来做呢?
解决方法:
它与您用于Vector的原理相同,但是通过列表列表进行迭代:
Matrix(initializer_list<initializer_list<double>> lst) :
row{lst.size()},
col{0} // not sure if all cols are same size
{
for (auto &x: lst) // iterate through outer list to find largest inner list
if (x.size()>col)
col = x.size();
cout<<row<<"x"<<col<<endl; // educational purpose only -> remove
elem=new double*[row];
auto it=lst.begin(); // iterate through outer list
for (int i=0; i<row; i++, it++) {
elem[i]=new double[col];
std::copy(it->begin(),it->end(),elem[i]); // copy current inner list
}
}
有了这个,您可以处理2D列表,如:
Matrix m{ {1,2,3},{4,5,6},{7,8,9}};
重要说明:
手动管理内存总是很痛苦且容易出错.使用std :: vector代替指向动态分配数组的指针会更容易.对于矩阵,您可以在向量向量之间进行选择,或者使用具有某个公式的展平向量来查找给定行和列的元素.
标签:c,matrix,initialization,initializer-list 来源: https://codeday.me/bug/20190823/1697987.html