一个内部的辅助类模板,该类通过提供由 valarray
的泛切分定义的子集阵列之间的操作来支持泛切分对象。
语法
template <class Type>
class gslice_array : public gsplice {
public:
typedef Type value_type;
void operator=(const valarray<Type>& x) const;
void operator=(const Type& x) const;
void operator*=(const valarray<Type>& x) const;
void operator/=(const valarray<Type>& x) const;
void operator%=(const valarray<Type>& x) const;
void operator+=(const valarray<Type>& x) const;
void operator-=(const valarray<Type>& x) const;
void operator^=(const valarray<Type>& x) const;
void operator&=(const valarray<Type>& x) const;
void operator|=(const valarray<Type>& x) const;
void operator<<=(const valarray<Type>& x) const;
void operator>>=(const valarray<Type>& x) const;
// The rest is private or implementation defined
}
备注
该类描述的对象将存储对 valarray<Type>
类的对象 va
及 gslice
类的对象 gs
的引用,它描述了要从 valarray<Type>
对象中选择的元素序列。
只通过写入 va[gs]
形式的表达式即可构造 gslice_array<Type>
对象。 然后 gslice_array
类的成员函数的行为方式就类似于为 valarray<Type>
定义的对应的函数签名,只不过仅所选的元素的序列受到影响。
该类模板是由某些 valarray
运算间接创建的,无法直接在程序中使用。 相反,slice
下标运算符使用内部辅助类模板:
gslice_array<Type> valarray<Type>::operator[]( const gslice& )
。
您仅通过为 va
va[gsl]
slice
gsl
valarray
的表达式来构造对象。 然后 gslice_array
类的成员函数的行为方式就类似于为 valarray<Type>
定义的对应的函数签名,只不过仅所选的元素的序列受到影响。 gslice_array
控制的序列由 slice
构造函数的三个参数定义,即第一个 slice
中第一个元素的索引、每个 slice
中的元素数量以及每个 slice
中元素之间的距离。
如下示例中:
const size_t lv[] = {2, 3};
const size_t dv[] = {7, 2};
const valarray<size_t> len(lv, 2), str(dv, 2);
// va[gslice(3, len, str)] selects elements with
// indices 3, 5, 7, 10, 12, 14
若要过程有效,索引必须有效。
示例
有关如何声明和使用 slice_array 的示例,请参阅 gslice::gslice
的示例。
要求
标头:<valarray>
命名空间:std