C++ 多维数组的可能性

标签 c++ arrays matlab c++11 boost

我想翻译一些现有的 Matlab 代码,这些代码很自然地使用了很多多维数组,我想知道有哪些可能的选择。我希望容器具有复制构造函数、默认构造函数,如果可能的话,在编译时清除错误消息,通过 A[i][j] 访问而且一般不会麻烦。最好,他们应该使用 std::move操作速度。

据我所知,选项归结为:

  • std::vector迭代。它确实有效,但写 std::vector<std::vector<std::vector<double> > > 似乎很愚蠢对于 3D 数组。我还担心速度和内存方面的开销。

  • boost::multiarrayblitz::Array提供大部分功能,但在运行时复制构造函数(请参阅 stackoverflow)失败。我不清楚这是否有正当理由。

  • Eigen library 看起来很快但是它根本不允许复制,并且没有默认构造函数,这意味着必须使用另一个容器。

  • std::array缺点是创建对象时必须知道大小,因此没有默认构造函数。

是否有一个更简单的多维容器满足所有请求但比迭代更 Thrift std::vector

最佳答案

有一个很好的线性代数包叫做 Armadillo

http://arma.sourceforge.net/

与 R 一起使用,快乐的用户

关于C++ 多维数组的可能性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26909186/

相关文章:

c++ - 如何防止宏重新定义

c++ - MISRA C++-2008 规则 5-0-15 - 数组索引应是指针算术的唯一形式

c++ - 如何读取nm命令: What does nm options -T and -U (undefined) mean?

c - 有没有一种好方法可以从字符串中删除一个字符而不复制它后面的所有字符?

c - 我想让它崩溃,但它没有

java - Matlab内存管理; java堆不足

c++ - 使用 boots::spirit::qi 进行解析的 TBB 并行化

java - 尝试使用类型变量创建类的数组时出现 ClassCastException

类文件夹和命名空间中的类方法的 Matlab 代码完成

MATLAB 引擎 : engEvalString() won't return if given incomplete input