查看文档后,我无法弄清楚这个。

我可以写代码,例如

typedef boost::multi_array<boost::int32_t, 3> data_t;

// 3d --
typedef data_t::array_view<3>::type data_3d_view_t;

// 2d --
typedef data_3d_view_t::reference data_2d_subarray_t;
typedef data_t::array_view<2>::type data_2d_view_t;

然后我可以使用类型访问2D切片 data_2d_subarray_t 或者 data_2d_view_t.

它们有什么区别?
我该怎么做我不能与另一个做的事情?
有差异吗?

非常感谢您向我澄清一下。最好的问候,罗德里戈布。

有帮助吗?

解决方案

从桌子 多维图相关类型:

参考这是包含值的参考类型。如果numdims == 1,则是元素&。否则,这与模板子阵列::类型是相同的类型。

Template Array_view ::类型这是带有DIMS尺寸的视图类型。通过调用操作员返回。它为Multiarray建模。

因此,它们是不同的类型。在这种情况下,视图代表了多边形的一种子集合。他们实现了多边形概念,但是它们所包含的元素实际上是其他一些多边形的元素。视图允许您定义一个新的 指数 进入多式元素的元素。例如,您可以定义一个逆转索引的视图,以便视图的第一个元素是Multiarray的最后一个元素。来自 文档:

一个视图使您可以在Multiarray中对待基础元素的子集,就像它是单独的Multiarray一样。由于视图是指相同的基础元素,因此对视图元素进行的更改将反映在原始的Multiarray中。

多元架是递归定义的;维度的多边形 n > 1可以被认为是维度多纪 n-1,是子阵列。子阵列和视图之间的关键区别在于,您可以将Multiarray切成沿任何轴(包括主要轴)的较低尺寸的视图,但是不能沿着主要轴线切割子阵列。

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];

我不认为有任何主要的性能差异,尽管这取决于您在创建视图时使用的索引类型。观点的性能可能会降低,但在大的意义上并非如此。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top