【发布时间】:2012-04-05 01:59:24
【问题描述】:
假设我有一个 N 维 boost::multi_array(为简单起见为 int 类型),其中 N 在编译时已知但可以变化(即是非类型模板参数)。让我们假设所有维度的大小都相同m。
typedef boost::multi_array<int, N> tDataArray;
boost::array<tDataArray::index, N> shape;
shape.fill(m);
tDataArray A(shape);
现在我想遍历A 中的所有条目,例如打印它们。例如,如果 N 为 2,我想我会写这样的东西
boost::array<tDataArray::index, 2> index;
for ( int i = 0; i < m; i++ )
{
for ( int j = 0; j < m; j++ )
{
index = {{ i, j }};
cout << A ( index ) << endl;
}
}
我使用索引对象来访问元素,因为我认为这比这里的 [] 运算符更灵活。
但是我怎么能在不知道维数N的情况下写这个。有没有内置的方法? multi_array 的文档对存在哪些类型的迭代器等不是很清楚。
还是我必须求助于一些带有自定义指针的自定义方法,从指针计算索引等?如果是这样 - 有什么建议这样的算法会是什么样子?
【问题讨论】:
-
@SamDeHaan 有点——不过,并非一直如此。我现在才意识到这个例子(我以前见过)使用了一个自定义版本的
for_each,它在 multi_array 例子的另一个文件中声明。我确实尝试了 std::for_each 并提升了 FOR_EACH 并且无法让它工作 - 我现在将研究这个自定义解决方案。但是我仍然需要一种方法来在遍历数组时获取实际索引(可能作为 tDataArray::index 的数组)。这是因为我需要的不仅仅是打印.. -
顺便说一句:stackoverflow.com/questions/6434678/… 也是相关的。但即使问题被标记为已解决,但实际上并非如此(据我所知)。
-
这个groups.google.com/group/boost-list/browse_thread/thread/…(第二个答案)看起来很有趣。虽然本质上这将通过索引算法回到“多维数组”。我会尝试弄清楚我是否可以将其中一些建议应用于手头的问题。
标签: c++ algorithm boost multidimensional-array