我想知道是否有一个cpp相当于通过存储在其他数组中的索引访问fortran中的数组位置
我是 cpp 的新手,但在 oop fortran 方面经验丰富。我正在考虑放弃 Fortran,以便在最近的 cpp 中更好地支持 oop(fortran 中的 oop 可能处于 2000 年 cpp 的阶段)。
但是,我的应用程序主要面向线性代数。与 cpp 相反,fortran 有很多内置的编译器对此支持。但我很乐意在 cpp 中加载库以获得复杂的 oop 支持。
但是如果 cpp 中缺少以下构造,那将非常烦人。
由于我还没有找到任何相关内容,如果有经验丰富的 cpp 程序员可以发表评论,我将不胜感激。
使用级联 vector 下标对 fortan 中的一维数组位置进行赋值可能会很复杂,如下所示:
iv1(ivcr(val(i,j)))=1
其中 iv1 是一维整数 vector ,ivcr 是一维整数 vector ,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
关于c++ - 通过 vector 下标访问 Fortran 数组,cpp 等效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57697021/