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

时间:2019-08-28 16:58:39

标签: c++ arrays vector subscript

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

我是cpp的新手,但是在oop fortran方面经验丰富。我正在考虑将fortran留在后面,以便为最近的cpp中的oop提供更好的支持(fortran中的oop可能处于2000 cpp的阶段)。

但是,我的应用程序非常适合线性代数。与cpp相反,fortran为此提供了许多内置的编译器。但是我会很高兴在cpp中加载库以获取详尽的oop支持。

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

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

使用向量下标的级联分配给fortan中的1D数组位置可能很复杂:

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

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

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

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

这将在iv1中用“ 1”填充部分。

cpp如何以最短的方式处理该问题。

1 个答案:

答案 0 :(得分:2)

给出(适当初始化):

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