通过向量下标访问 Fortran 数组,等效于 cpp

Fortran array access via vector subscripts, cpp equivalent

我想知道是否有一个 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