C++ gslice类用法详解

  • 内容
  • 评论
  • 相关

valarray 头文件中定义了 gslice 类,这是切片思想的泛化。gslice 对象从起始索引生成索引值,就像一个切片,但它能生成两个或两个以上的切片,具体实现方式有一点复杂。通常,gslice 会假定从表示多维数组的 valarray 对象中选择的元素会被用来作为元素的线性序列。

gslice 由 3 个参数值定义。第一个构造函数参数是起始索引,它是指定第一个分片的第一个元素的 size_t 类型的值,这和 slice 一样。第二个参数是一个 valarray<size_t> 对象,它的每个元素都指定了 size。对于第二个参数指定的每一个 size,都有一个相应的步进;这些步进由第三个参数定义,它是一个和第二个参数有相同元素个数的象。第二个参数中,每个size的步进都在第三个参数中有相应的元素。

当然,gslice 表示的每个 slice 都有一个起始索引、大小和步进。第一个 slice 的起始索引是 gslice 构造函数的第一个参数。第一个 slice 的 size 是 valarray (由 size 组成)的第一个元素,步进是另一个的 valarray (由 stride 组成)的第一个元素。这应该可以很容易发现,但现在它变得有些复杂。

第一个 slice 生成的索引值是第二个 slice 的起始索引。也就是说,第二个 slice 从来自于第一个 slice 的每个索引中定义了一套索引值。整个过程以此类推。

第一个 slice 之后的每一个 slice 的索引都是由前一个 slice 生成的,它们会产生一组索引值。例如,如果 glice 的第一个 slice 的大小是 3,它定义了 3 个索引值;如果第二个 slice 的大小是 2,它生成了 2 个索引值。第二个 slice 的大小和步进会被使用 3 次,且每一次都会用第一个 slice 的索引值作为起始索引。因此可以从这两个 slice 中得到 6 个索引值,它会从 valarray 中选择 6 个元素。

用 gslice 作为 valarray 的下标的结果是会包含一个给定元素的多个引用。当 gslice 的最后一个 slice 所生成的索引序列重叠时,会出现这种情况。图 1 展示了一个 gslice 从 valarray 中选择元素的简单示例。



图 1 gslice 对象如何从 valarray 中选择元素(点此查看高清大图)
 

本文标题:C++ gslice类用法详解

本文地址:https://www.hosteonscn.com/3077.html

评论

0条评论

发表评论

邮箱地址不会被公开。 必填项已用*标注