[英]Why use boost multi_array index type for indexing boost arrays in C++?
在boost multi_array 文档的第一个示例中,声明了索引类型,即viz。
typedef boost::multi_array<double, 3> array_type;
typedef array_type::index index;
然后可以将其用于遍历数组索引,例如
array_type someArray(boost::extents[3][3][3]);
for(index i = 0; i < 3; i++)
someArray[0][0][i] = i;
这可能是一个简单的问题,但是我无法找到关于为什么应使用此索引的明确记录,而不是说一个unsigned int
。
您一般不能使用无符号整数,因为某些尺寸的基数很可能是负数。
因此,如果编写通用代码,则最好从提供的数组中推断出index
类型。
文件说
- 这是用于对A进行索引的带符号整数类型。它也用于表示跨步和索引基数。
基于“正确”索引的循环看起来类似于:
#include <boost/multi_array.hpp>
#include <iostream>
int main() {
using A = boost::multi_array<double, 3>;
A arr(boost::extents[3][2][4]);
std::iota(arr.data(), arr.data()+arr.num_elements(), 1.); // fill with increasing numbers
arr.reindex(-17);
for (A::index i = arr.index_bases()[0]; i < arr.index_bases()[0]+A::index(arr.shape()[0]); ++i) {
for (A::index j = arr.index_bases()[1]; j < arr.index_bases()[1]+A::index(arr.shape()[1]); ++j) {
for (A::index k = arr.index_bases()[2]; k < arr.index_bases()[2]+A::index(arr.shape()[2]); ++k) {
std::cout << "(" << i << "," << j << "," << k << "): " << arr[i][j][k] << "\n";
}
}
}
}
印花
(-17,-17,-17): 1
(-17,-17,-16): 2
(-17,-17,-15): 3
(-17,-17,-14): 4
(-17,-16,-17): 5
(-17,-16,-16): 6
(-17,-16,-15): 7
(-17,-16,-14): 8
(-16,-17,-17): 9
(-16,-17,-16): 10
(-16,-17,-15): 11
(-16,-17,-14): 12
(-16,-16,-17): 13
(-16,-16,-16): 14
(-16,-16,-15): 15
(-16,-16,-14): 16
(-15,-17,-17): 17
(-15,-17,-16): 18
(-15,-17,-15): 19
(-15,-17,-14): 20
(-15,-16,-17): 21
(-15,-16,-16): 22
(-15,-16,-15): 23
(-15,-16,-14): 24
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.