c++ - 多维数组实现

标签 c++ boost c++11 data-structures multidimensional-array

<分区>

在搜索了一段时间后,我没有找到我的问题的答案,如果这个问题已经在其他地方得到回答,请提前致歉。

我正在寻找 C++ 中的多维数据结构,它不仅可以作为 N 维数组访问,还可以作为一维访问。

举个例子,假设一个简单的二维矩阵(它可以达到更高的维度,但在那种情况下,让我们坚持这个例子)。在大多数情况下,成员将以行-列-形式访问,例如矩阵[x][y]。在其他情况下,可能希望将所有成员作为单个列表访问,例如使用标准算法进行矩阵加法。

标准方法可能类似于 std::array<std::array<double, 4>, 4>并另外编写一个迭代器,可以线性访问所有成员,也许还有一个额外的访问函数。

第二种方法是相反的 std::array<double, 16>使用行-列形式的访问器,但在这种情况下返回整列变得很棘手。

或者也许它可以通过 boost MultiArray 实现,但我认为减小 MultiArray 的维度总是导致只获得 MultiArray 的切片。

我的问题归结为:标准库或一些知名库(如 boost)中是否已经有针对此的实现?如果不是,我是否遗漏了一点并且有比我写的方法更简单的方法?

编辑: 我并不是在寻找对所有值的唯一迭代,就像在提到的问题中那样。但是但是从有针对性的文档中我可以发现 MultiArray 可以作为 C 样式数组访问,这足以满足我的需要。然后可以关闭它,感谢所有答案

最佳答案

参见 boost::multi_array::data()boost::multi_array::num_elements()

与 std::vector 一样,您似乎可以通过索引将其作为固定内存块访问,如果您只需要的话。我从来没有这样做过,但看起来你可以。仅仅因为你可以并不一定意味着你应该,但是,好吧......

看到这个答案:

how to traverse a boost::multi_array

关于c++ - 多维数组实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21081381/

相关文章:

c++ - 如何针对 "suspicious sizeof"或 SIZEOF_MISMATCH 结果训练 Coverity?

c++ - 使用 OpenGL 数据在运行时创建纹理

c++ - 在 C++ 中为编译器实现符号表

c++ - MSVC2015 decltype 重载模板函数中的参数类型

c++ - 断言失败,列表迭代器不可取消引用

C++ 平台兼容性

c++ - 在派生类中管理线程生命周期

boost - 如何通过 Gloa 使用来自多个文件的 boost 日志

c++ - boost 'release' 上的 ptr_container 泄漏?

c++ - gcc nullptr 问题