The index_bases member index_bases returns a container with each dimension index base. The shape member function returns a container with each dimension (size). You can use both of these parameters to determine the range of indices for each dimension:
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; }
source share