gslice_array

一个内部的辅助类模板,该类通过提供由 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> 类的对象 vagslice 类的对象 gs 的引用,它描述了要从 valarray<Type> 对象中选择的元素序列。

只通过写入 va[gs] 形式的表达式即可构造 gslice_array<Type> 对象。 然后 gslice_array 类的成员函数的行为方式就类似于为 valarray<Type> 定义的对应的函数签名,只不过仅所选的元素的序列受到影响。

该类模板是由某些 valarray 运算间接创建的,无法直接在程序中使用。 相反,slice 下标运算符使用内部辅助类模板:

gslice_array<Type> valarray<Type>::operator[]( const gslice& )

您仅通过为 gslice_array<Type>/a0> 编写窗体vava[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

另请参阅

C++ 标准库中的线程安全