index_bases
成員函數返回一個包含每個維度的索引基的容器。成員函數shape
返回一個包含每個維度的範圍(大小)的容器。您可以使用這兩種判斷指數的範圍爲每個維度:
typedef boost::multi_array<int, 3> array_type;
void printArray(const array_type& a)
{
// Query extents of each array dimension
index iMin = a.index_bases()[0];
index iMax = iMin + a.shape()[0] - 1;
index jMin = a.index_bases()[1];
index jMax = jMin + a.shape()[1] - 1;
index kMin = a.index_bases()[2];
index kMax = kMin + a.shape()[2] - 1;
for (index i=iMin; i<=iMax; ++i)
{
for (index j=jMin; j<=jMax; ++j)
{
for (index k=kMin; k<=kMax; ++k)
{
std::cout << a[i][j][k] << " ";
}
}
}
}
int main()
{
typedef array_type::extent_range range;
typedef array_type::index index;
array_type::extent_gen extents;
// Extents are hard-coded here, but can come from user/disk.
array_type a(extents[2][range(1,4)][range(-1,3)]);
// Populate array with values...
// Pass the array to a function. The function will query
// the extents of the given array.
print(a);
return 0;
}
但這要求你知道你正在編寫代碼的時間數組的大小,失去了大部分的multi_array的泛型。 – 2016-04-07 19:29:52
@DavidDoria,在'A(extents [2] [range(1,4)] [range(-1,3)])'中,你可以用你喜歡的任何東西替換硬編碼的維度值,來自磁盤或來自用戶的輸入。爲了簡化示例,我對數字進行了硬編碼。 – 2016-04-07 20:09:37
重新排列示例以更好地說明如何在數組初始化之後查詢維度範圍。 – 2016-04-07 20:21:38