假设我有一个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);
Run Code Online (Sandbox Code Playgroud)
现在我想循环所有条目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;
}
}
Run Code Online (Sandbox Code Playgroud)
我已经使用索引对象来访问元素,因为我认为这比[] -operator更灵活.
但是如何在不知道尺寸数量的情况下编写这个N.有没有内置的方式?multi_array的文档对于存在哪种类型的迭代器等不是很清楚.或者我是否必须使用自定义指针,计算指针指针等自定义方法?如果是这样 - 任何建议这样的算法是什么样的?
我看过这篇文章,讲述了如何使用该boost::multi_array::origin()函数循环非基于零的数组,但这只创建了一个循环.
如何遍历a的每个维度multi_array,例如:
for(index i = <origin of dim 1>; ...) {
for(index j = <origin of dim 2>; ...) {
for(index k = <origin of dim 3>; ...) {
myArray[i][j][k] = <something>;
}
}
}
Run Code Online (Sandbox Code Playgroud)
给定一个上下界都未知的数组?