gpt4 book ai didi

c++ - 如何使用二维 initializer_list 进行初始化?

转载 作者:太空狗 更新时间:2023-10-29 20:20:47 26 4
gpt4 key购买 nike

我知道, vector 类是按以下方式初始化的:

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
}
}

有了这个你可以处理像这样的二维列表:

Matrix m{ {1,2,3},{4,5,6},{7,8,9}}; 

Online demo

重要说明:手动管理内存总是很痛苦且容易出错。使用 std::vector 而不是指向动态分配数组的指针会更容易。对于矩阵,您可以选择 vector 的 vector ,或带有一些公式的扁平化 vector 来查找给定行和列的元素。

关于c++ - 如何使用二维 initializer_list 进行初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48243044/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com