slice_array

2.数组子集类—slice类和类模板slice_array

  1. slice是切割的意思,即将一个向量作为任意维度的数组来处理。
  2. “切割”操作是在一个valarray中,中间距离为n的多个元素。
  3. slice的跨步是切割两个元素的距离(间隔的下标个数)

1.slice类

  1. std::slice 是选择器类,一个 std::slice
  2. 类型的对象保有三个值:起始下标,跨度,及子集中的值的总数。std::slice 类型的对象可用作 valarray 的 operator[] 的下标。

类原型:

//定义于头文件 <valarray>
class slice;

构造函数:

slice();
slice( std::size_t start, std::size_t size, std::size_t stride );
slice( const slice& other );

说明:三个函数都是构造一个新切片
1. 第一种: 默认构造函数
2. 第二种:
   1. start:首元素的位置
   2. size: 切片中的元素数
   3. stride: 切片前后的间距
 可以得到每个切片的位置:
   1. start + 0*stride
   2. start + 1*stride
   3. …
   4. start + (size-1)*stride
3. 第三种: other:另一个切片 ,构造other的副本
   
切割可以从一个数组中提出部分元素,成为一个新的数组(valarray)。
使用slice可以创建数组的各种各样的子集。(stl没有矩阵类)

  • 矩阵的表示即是一个valarray
  • slice的方式: 使得valarray类型数组拥有维度

slice_array: 为slice提供内部辅助运算的类别。

  • 对用户来说,slice_array类完全透明
  • slice_array的构造函数和赋值操作都是私有的;

slice_array类的定义的操作:
(1). 赋值内容
(2).赋值给另一个valarray
(3).调用任何一个赋值符合运算
如果要完成其他操作,需要将子集转换成valarray数组;

例子:

//---------------------省略--------------------
valarray<int> val_1 = { 1, 2, 3, 4, 5, 6, 7,8,9 };
valarray<int>  val_2 = val_1[slice(0,2,3)];

cout << "val_2:";
copy(begin(val_2), end(val_2), ostream_iterator<int>(cout, "   "));
cout << endl;
//------------------省略-------------------

如果我们把val_1看做(3,3)的矩阵,我们取第一列为:
输出结果为:

val_2:1   4   7
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值