具有两个动态维度和一个静态维度的多维数组
multi-dimensional array with two dynamic dimension and one static dimension
我知道我可以声明一个有一个动态维度的数组,如下所示:
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动态数组(然后删除它!)非常复杂。
请注意,使用上面列出的两种解决方案,您不需要使用new
和delete
运算符进行任何手动数组分配
容器类std::vector
和std::array
将已经正确处理所有这些内容。
相关文章:
- 分离一个静态常量 std::thread?
- 从另一个静态常量数组初始化静态常量数组(只需少量计算)
- 如果两个静态库使用相同的另一个静态库,如何避免"LNK2005 Already Defined error"?
- 我可以使用 constexpr 函数声明一个静态数组吗?
- 我正在尝试在我的类中创建一个静态成员,但编译器警告我它是未定义的
- 一个静态变量多副本
- 两个C++库如何共享一个静态缓冲区?
- 为什么静态指针返回函数中有一个"静态"键?
- C++ 给出编译器错误,将一个(静态)常量全局变量设置为另一个静态常量变量
- cmake-创建一个静态库
- 对另一个静态库中静态库方法的未定义引用
- 如何创建一个静态类来引用带有C++的字符串变量
- QMAKE:将静态库链接到另一个静态库
- 长镜头 -- 可能有一个静态类成员,该类成员具有访问非静态成员的 lambda
- 为 c++ 构建一个静态库,该库在内部依赖于第三方库
- 使用类模板参数推导来创建一个静态接口
- 具有两个动态维度和一个静态维度的多维数组
- 创建一个静态包含ffmpeg的共享库
- NetBeans创建一个静态库C
- 在抽象类中,可以使用抽象类A的类型创建一个静态字段