首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何处理包含动态分配的固定大小子阵列的多维数组?

如何处理包含动态分配的固定大小子阵列的多维数组?
EN

Stack Overflow用户
提问于 2019-01-03 06:00:37
回答 1查看 0关注 0票数 0

我已经下载了你可以看到的代码来解决具有张量系数的方程组......不管我为什么这样做,我需要将某种4D数组(LHS)和2D数组传递给这个函数。

我熟悉2d数组和动态分配的概念。但我发现声明一个4d动态数组(然后删除它!)非常复杂。 我想知道是否有办法让数组的二维维度动态,其余的保持静态! 对于以下函数签名LHS[][3][3][3],[]大小由用户定义并且[3][3][3]是固定的。

代码语言:javascript
复制
 void SolveBlockTri(double LHS[][3][3][3], double RHS[][3], int iNRows)
EN

回答 1

Stack Overflow用户

发布于 2019-01-03 15:26:45

您可以这样调用该函数

代码语言:javascript
复制
void SolveBlockTri(double LHS[][3][3][3], double RHS[][3], int iNRows)

使用动态分配的惯用的c ++技术:

代码语言:javascript
复制
int nRows = 42;
std::vector<std::array<std::array<std::array<double>,3>,3,3> lhs; 
    // = where ever you fill that from;
std::vector<std::array<double,3>> rhs,nRows);

SolveBlockTri(&(lhs.data()), &(rhs.data()), nRows);   

您还可以使用模板化包装函数,具体取决于固定大小的部分:

代码语言:javascript
复制
template<size_t FixedSize>
void CallSolveBlockTri(
    const std::vector<std::array<std::array<std::array<double>
                     ,FixedSize>,FixedSize,FixedSize>& LHS
  , std::vector<std::array<double,FixedSize>>& RHS
  , int iNRows) {
    SolveBlockTri(&(LHS.data()), &(RHS.data()), iNRows);
};

但我发现声明一个4d动态数组(然后删除它!)非常复杂。

请注意,使用上面概述的两个解决方案,您无需使用newdelete运算符进行任何手动数组分配。 容器类std::vectorstd::array已经将处理所有的东西正常。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100006349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档