C++ mask_array 类

  • 定义和用法

    template <class T> mask_array;
    std::mask_array 与掩码一起使用时,用作valarray的下标运算符(operator [])返回的中间类型。它引用由掩码(valarray <bool>)选择的valarray对象中的元素,并重载赋值和复合赋值运算符,从而允许直接访问选择中的元素。该类型可转换为valarray(请参见valarray构造函数),从而产生一个包含所引用元素副本的新对象。
  • 声明

    C++ 98 C++ 11
    获得此类型的对象作为对valarray::operator []的调用的返回值。 它们不能直接构造或复制。 声明为: 获得此类型的对象作为对valarray::operator []的调用的返回值。 它们不能默认构造,但可以复制。 声明为:
    template <class T> class mask_array {
    public:
      typedef T value_type;
      void operator=   (const valarray<T>&) const;
      void operator*=  (const valarray<T>&) const;
      void operator/=  (const valarray<T>&) const;
      void operator%=  (const valarray<T>&) const;
      void operator+=  (const valarray<T>&) const;
      void operator-=  (const valarray<T>&) const;
      void operator^=  (const valarray<T>&) const;
      void operator&=  (const valarray<T>&) const;
      void operator|=  (const valarray<T>&) const;
      void operator<<= (const valarray<T>&) const;
      void operator>>= (const valarray<T>&) const;
      void operator=(const T&);
      ~mask_array();
    private:
      mask_array();
      mask_array(const mask_array&);
      mask_array& operator= (const mask_array&);
    };
    template <class T> class mask_array {
    public:
      typedef T value_type;
      void operator=   (const valarray<T>&) const;
      void operator*=  (const valarray<T>&) const;
      void operator/=  (const valarray<T>&) const;
      void operator%=  (const valarray<T>&) const;
      void operator+=  (const valarray<T>&) const;
      void operator-=  (const valarray<T>&) const;
      void operator^=  (const valarray<T>&) const;
      void operator&=  (const valarray<T>&) const;
      void operator|=  (const valarray<T>&) const;
      void operator<<= (const valarray<T>&) const;
      void operator>>= (const valarray<T>&) const;
      void operator=(const T&) const;
    
      mask_array() = delete;
      mask_array(const mask_array&);
      const mask_array& operator= (const mask_array&) const;
      ~mask_array();
    };
  • 示例

    
    // mask_array example
    #include <iostream>     // std::cout
    #include <cstddef>      // std::size_t
    #include <valarray>     // std::valarray
    
    int main ()
    {
      std::valarray<int> foo (10);
      for (int i=0; i<10; ++i) foo[i]=i;        //  0  1  2  3  4  5  6  7  8  9
    
      std::valarray<bool> mymask (10);
      for (int i=0; i<10; ++i)
        mymask[i]= ((i%2)==1);                  //  f  t  f  t  f  t  f  t  f  t
    
      foo[mymask] *= std::valarray<int>(10,5);  //  0 10  2 30  4 50  6 70  8 90
      foo[!mymask] = 0;                         //  0 10  0 30  0 50  0 70  0 90
    
      std::cout << "foo:";
      for (std::size_t i=0; i<foo.size(); ++i)
        std::cout << foo[i] << ' ';
      std::cout << '\n';
    
      return 0;
    }
    
    尝试一下
    输出
    
    foo: 0 10 0 30 0 50 0 70 0 90
    
  • 相关页面

    slice_array Valarray切片选择(类模板)
    gslice_array Valarray gslice选择(类模板)
    indirect_array Valarray间接选择(类模板)