首页 理论教育 C++STL中的数组子集类

C++STL中的数组子集类

时间:2023-10-25 理论教育 版权反馈
【摘要】:slice_array类由此应运而生。slice_array是为切割提供内部辅助类别。对用户而言,slice_array类内部是完全透明的,但类模板slice_array的所有构造函数和赋值操作符均是私有类型。slice_array类的操作均有定义:1)将同一值赋予每一个元素。实际情况是,根据程序员描述valarray类对象的下标,为给定切割建立一个slice_array类型的数组。图6-6 例6-6的执行效果总结读者要认真阅读上述两个例题,体会slice类和类模板slice_array的用法。

C++STL中的数组子集类

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)

978-7-111-51399-5-Chapter06-56.jpg

978-7-111-51399-5-Chapter06-57.jpg

例6-5的执行效果如图6-5所示。

978-7-111-51399-5-Chapter06-58.jpg

图6-5 例6-5的执行效果

例6-6

978-7-111-51399-5-Chapter06-59.jpg

978-7-111-51399-5-Chapter06-60.jpg

例6-6的执行效果如图6-6所示。

978-7-111-51399-5-Chapter06-61.jpg

图6-6 例6-6的执行效果

总结

读者要认真阅读上述两个例题,体会slice类和类模板slice_array的用法。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈