我想知道是否有一个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如何以最短的方式处理该问题。
答案 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