c++ - 通过 vector 下标访问 Fortran 数组,cpp 等效

标签 c++ arrays vector subscript

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

相关文章:

c++ - 如何将 `char *` 深度复制到 std::stringstream?

c++ - 将嵌套的 std::arrays 视为具有链式 .data() 的单个平面数组

c++ - 在可变参数模板中构造固定大小的数组

c++ - 如何测试列表或 forward_list 的迭代器(包括尾部迭代器和开始前迭代器)保持有效,

c++ - 如何将 ampl 中的集合表示为 C++ 中的 vector ?

C++:在通过 tcp/ip 发送字节时使用 vector 的最佳方式

ios - 图像在 ios 中滚动时波动

java - 根据输入的内容输出不同数组值的组合

arrays - ballerina - 检查数组中是否存在某个值

c++ - 在 C++ 中将 push_back 用于 vector