通过矢量下标访问 Fortran 数组,相当于 cpp



我想知道是否有一个 cpp 等效于通过存储在其他数组中的索引访问 fortran 中的数组位置

我是 cpp 的新手,但在 oop fortran 方面经验丰富。我正在考虑离开 fortran,以便在最近的 cpp 中更好地支持 oop(fortran 中的 oop 可能处于 2000 cpp 的阶段(。

但是,我的应用程序主要面向线性代数。与cpp相反,fortran有很多编译器内置支持这一点。但我很乐意在 cpp 中加载库以获得详细的 oop 支持。

但是,如果 cpp 中缺少以下结构,那将非常烦人。

由于我还没有找到任何相关内容,如果一些有经验的 cpp 程序员可以发表评论,我将不胜感激。

使用矢量下标级联分配给 fortan 中的一维数组位置可能很复杂,如下所示:

iv1(ivcr(val(i,j)))=1

其中 iv1 是一维整数向量,ivcr 是一维整数向量,val 是二维整数数组,i 和 j 是标量。我想知道我是否可以在 cpp 中以类似的紧凑形式编写它。

一个稍微复杂一点的例子是:

iv1(ivcr(val(i:j,j)))=1

这将用"1"填充 iv1 中的部分。

CPP将如何以尽可能短的方式处理这个问题。

给定(适当初始化(:

std::vector<int> iv1, ivcr;
std::vector<std::vector<int>> val;

那么你的iv1(ivcr(val(i,j)))=1就是

iv1[ivcr[val[i][j]]] = 1;

至于iv1(ivcr(val(i:j,j)))=1,或者只是val(i:j, j),没有内置的方法可以像这样切成数组。为了能够1分配给这些类型的嵌套数据结构访问,您需要提供表达式模板的数据结构。Eigen库就是这样,是C++的主要线性代数库之一。在此处查看有关索引和切片的文档:

https://eigen.tuxfamily.org/dox-devel/group__TutorialSlicingIndexing.html

最新更新