从桌子上
MultiView associated types
:
引用这是包含值的引用类型。如果NumDims==1,则这是element&元素;。否则,这与template subarray::type的类型相同。
模板数组视图::类型这是具有尺寸标注的视图类型。由呼叫接线员返回。它是多阵列的模型。
所以他们是不同的类型,首先。在此上下文中,视图表示多数组的一种子集合。它们实现了多数组的概念,但是它们包含的元素实际上是其他多数组的元素。视图允许您定义新的
index
在多数组的元素中。例如,可以定义一个反转索引的视图,这样视图的第一个元素就是多数组的最后一个元素。从
documentation
:
视图允许您将多数组中底层元素的子集视为单独的多数组。由于视图引用相同的底层元素,因此对视图元素所做的更改将反映在原始多数组中。
多数组是递归定义的;多维数组
n个
>1可以看作多维数组的数组
n个
-1,是子阵。子数组和视图之间的关键区别在于,可以将多个数组沿任何轴(包括长轴)分成较低维度的视图,但是子阵列不能沿主轴切割。
data_t d3(boost::extents[4][5][6]);
data_2d_view_t d2_view = d3[boost::indices[range(0,4,2)][1][range(0,6,3)]];
data_2d_subarray_t d2_sub = d3[1];
// the following, and anything like it, won't work
data_2d_subarray_t d2_sub_b = d3[range(0,4,2)][0];
我不认为存在任何主要的性能差异,尽管这取决于创建视图时使用的索引类型。视图的性能可能稍差一些,但不是很大。