【发布时间】:2012-01-18 22:14:37
【问题描述】:
我有一个 3D multi_array,我想使用运行时指定的维度制作 2D 切片。我知道退化维度的索引和要在该退化维度中提取的切片的索引。目前,丑陋的解决方法如下所示:
if (0 == degenerate_dimension)
{
Slice slice = input_array[boost::indices[slice_index][range()][range()]];
}
else if (1 == degenerate_dimension)
{
Slice slice = input_array[boost::indices[range()][slice_index][range()]];
}
else if (2 == degenerate_dimension)
{
Slice slice = input_array[boost::indices[range()][range()][slice_index]];
}
有没有更漂亮的方式来构造 index_gen 对象? 类似的东西:
var slicer;
for(int i = 0; i < 3; ++i) {
if (degenerate_dimension == i)
slicer = boost::indices[slice_index];
else
slicer = boost::indices[range()];
}
Slice slice = input_array[slicer];
似乎每次对 boost::indices::operator[] 的后续调用都会根据维度(即先前调用的数量)返回不同的类型,因此无法使用可以保存临时 index_gen 的单个变量对象。
【问题讨论】:
-
+1 用于使用理智的多维数组的明确问题,而不是 C 的东西! :)
标签: c++ boost boost-multi-array