【问题标题】:Including boost::multi_array in a class with not specified number of dimensions [duplicate]在未指定维数的类中包含 boost::multi_array [重复]
【发布时间】:2013-12-13 12:56:47
【问题描述】:

我正在创建一个 gridcell 类,它基本上是一个多单元格数组。我希望这个网格单元有任意数量的维度。这意味着在 boost::multiarray 变量的声明中,我不能指定模板的第二个参数。具体来说,我的代码如下所示:

#include "cell.h"
#include <iostream>
#include <vector>
#include <boost/multi_array.hpp>

class GridCell {
public: 
    GridCell(); // Default constructor not used.
    GridCell(const std::vector<int> dims, const float leafsize);
    virtual ~GridCell();

    friend std::ostream& operator << (std::ostream & os, const GridCell & c);

private:
    std::vector<int> dims_; // Vector containing the size of each dimension.
    float leafsize_; // It is assumed that the cells in the grid are cubic.
    boost::multi_array<Cell,ndims> * grid;
};

具体来说, boost::multi_array * grid;我希望它在 Gridcell 类构造函数中指定的维数。

有什么建议或替代方法吗?

非常感谢!

【问题讨论】:

  • boost::multi_array 无法做到这一点。我将此标记为副本的问题的答案具有动态尺寸的示例代码。
  • 您对可能的替代方案有什么建议吗?我想到了两种可能的解决方案: - 在类中没有 boost 多数组,只是通过引用类的方法来传递它, - 定义最大维度。假设 boost::multi_array * grid 正如我在 boost 文档中看到的那样,可以只用一个 int 来定义一些维度,这意味着维度实际上是“平坦的”(boost.org/doc/libs/1_55_0/libs/multi_array/doc/reference.html 句子 A指定单索引时会出现退化维度...)
  • 那太糟糕了。自己滚怎么样?一个原始的实现对我来说似乎并不难。
  • 好吧,虽然我对 C++ 有一些经验,但我必须承认我不知道如何面对这种原始的实现。你能给我什么建议吗?谢谢!
  • 这真的取决于功能集。如果您的所有尺寸都具有相同的尺寸,这将变得容易得多。

标签: c++ boost boost-multi-array


【解决方案1】:

为了结束这个问题,我添加了这个答案:

最后我通过创建一个基于数组的自制容器解决了这个问题。最初它是基于向量的,但我更喜欢通过确定维数和最大大小来处理数组。在这种情况下,我认为这种方法比使用 boost multi_array 更好,因为我的容器实际上是一个平面数组,并且元素索引是通过数学运算概括的。

感谢您的回复。

【讨论】:

    猜你喜欢
    • 2012-01-18
    • 1970-01-01
    • 2011-09-20
    • 1970-01-01
    • 2014-11-12
    • 2012-04-05
    • 1970-01-01
    • 2021-01-25
    • 1970-01-01
    相关资源
    最近更新 更多