是否可以在C++中使用类似matlab的索引来访问数组

Is it possible to access array using matlab like indexing in C++?

本文关键字:matlab 索引 数组 访问 C++ 是否      更新时间:2023-10-16

我正在考虑使用类似matlab的索引访问C++数组,例如a[1 , :]。这将是非常方便的。

我重载了运算符[],但似乎不可能使用a[1, : ]语法。

我找到的解决方案是编写一个脚本,它预处理C++源代码,并将a[1, :]转换为C++函数,例如col(a, 1)。但这似乎很费力。

有人有更好的解决方案吗?谢谢

我找到的解决方案是编写一个脚本,它预处理C++源代码,并将[1,:]转换为C++函数,例如col(a,1)。但这似乎很费力。

它也很脆弱,容易出错,复杂度很高,会导致任何错误和模糊。你最好使用宏(而且你永远不应该使用那样的宏)。

有人有更好的解决方案吗?

你有没有考虑过简单地添加一个可以满足你需求的函数?语法不会使用数组索引,但任何查看代码的人(包括两年后的自己)都会熟悉它,并且是显式的(因为函数名会说明函数的作用)。

Boost多数组提供1索引和列视图。range()代替了matlab算子:

您还可以从文档中定义数组视图,如本例所示

myarray[ boost::indices[range()][range() < 5 ][4 <= range().stride(2) <= 7] ]

相当于matlab

myarray(:,1:4,4:2:7)