具有两个动态维度和一个静态维度的多维数组

multi-dimensional array with two dynamic dimension and one static dimension

本文关键字:一个 静态 数组 两个 动态      更新时间:2023-10-16

我知道我可以声明一个有一个动态维度的数组,如下所示:

double(*LHS)[3][3][3] = new double[M + 2][3][3][3];

但我需要声明一个具有"二"动态维度的数组。我检查了如下语法:

double (**U)[3] = new double*[M + 2][3];    
for (int i = 0; i < M + 2; ++i) U[i][3] = new double[N + 2][3];

但它不起作用!

请帮助我正确定义一个具有动态维度的三维数组。

您可以使用什么来调用函数

void SolveBlockTri(double LHS[][3][3][3], double RHS[][3], int iNRows)

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

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);   

您还可以根据固定大小的部件使用模板包装器函数:

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将已经正确处理所有这些内容。