slice是切割的意思,即将一个向量作为任意维数组去操作。“切割”是指在一个valar- ray中,间距为n的多个元素。slice的跨步是切割中两个元素的距离(间隔的下标个数)。每次切割均具备以下3个属性:
1)起始下标。
2)元素个数。
3)元素的间距。
切割可以从一个数组中提出部分元素,组成一个新数组(valarray)。
从一个valarray和一个slice,可以构造出感觉上类似valarray而实际上是一种由切割描述的数组子集。使用slice方式可以创建数组的各种各样的子集。STL没有提供矩阵类,使用slice方式构造出由不同需要而优化的各种矩阵。因此矩阵的表示即是一个valarray,通过切割(slice)的方式,使valarray类型数组拥有了维数。
为方便运算和操作,程序员需要将数组的子集转换成类。slice_array类由此应运而生。slice_array是为切割(slice)提供内部辅助类别。对用户而言,slice_array类内部是完全透明的,但类模板slice_array的所有构造函数和赋值操作符均是私有类型(private)。
slice_array类的操作均有定义:
1)将同一值赋予每一个元素。
2)赋值另一个valarray。
3)调用任何一个赋值复合运算。如果希望完成其他操作,必须先将子集转换成valarray类的对象才可以。
同一个valarray的不同slice方式,可以组合成诸多子集,自己结果可以存入valarray类型的另一个子集中。在此基础上,valarray型数组可作为二维矩阵看待。
对于valarray,用户不会直接创建一个valarray类的对象。实际情况是,根据程序员描述valarray类对象的下标,为给定切割(slice)建立一个slice_array类型的数组。值得一提的是,slice_array是禁止复制的,但slice是允许复制的。
下面列举两个例题作为本节学习的范例。
例6-5(www.xing528.com)
例6-5的执行效果如图6-5所示。
图6-5 例6-5的执行效果
例6-6
例6-6的执行效果如图6-6所示。
图6-6 例6-6的执行效果
总结
读者要认真阅读上述两个例题,体会slice类和类模板slice_array的用法。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。