C++如何创建元素为Matrix类型的二维数组以复用原有矩阵处理函数
实现方案
完全有可行方案,且无需修改任何现有接收Matrix类型入参的函数,以下是两种常用实现:
方案1:固定大小的原生二维数组
适合外层二维维度固定为2x2的场景,直接声明元素为Matrix的原生数组即可:
// 声明2x2的Matrix数组,每个元素都是独立的Matrix实例 Matrix a[2][2]; // 初始化每个元素为2行2列的矩阵 for (int i = 0; i < 2; i++) { for (int j = 0; j < 2; j++) { a[i][j] = Matrix(2, vector<double>(2, 1)); // 初始值可按需调整 } }
调用原有函数的时候直接传a[i][j]即可,和你注释里写的预期用法完全一致。
方案2:动态大小的外层vector容器
如果外层二维维度需要动态调整,可以用嵌套vector存储Matrix元素,注意这不是你担心的四层double嵌套vector,外层容器的元素类型就是你定义的Matrix,完全兼容原有函数:
// 外层是2x2的vector,每个元素都是Matrix实例 vector<vector<Matrix>> a(2, vector<Matrix>(2, Matrix(2, vector<double>(2, 1))));
调用方式和原生数组完全相同:
Matrix b(2, vector<double>(2)); for (int i = 0; i < 2; i++) { for (int j = 0; j < 2; j++) { test2D_array(2, 2, a[i][j], b); } }
注意事项
你现有代码里的test2D_array函数存在越界风险:当传入的l=2时,代码中a[l][i]会访问索引为2的行,但你初始化的Matrix只有2行(索引范围0~1),需要调整参数或者索引逻辑避免越界。
内容的提问来源于stack exchange,提问作者Kristoffer Lindvall
相关产品推荐
相关产品推荐

