C++ gslice_array 类

  • 定义和用法

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

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

    
    // gslice_array example
    #include <iostream<     // std::cout
    #include <cstddef<      // std::size_t
    #include <valarray<     // std::valarray, std::gslice
    
    int main ()
    {
      std::valarray<int< foo (14);
      for (int i=0; i<14; ++i) foo[i]=i;
    
      std::size_t start=1;
      std::size_t lengths[]= {2,3};
      std::size_t strides[]= {7,2};
    
      std::gslice mygslice (start,
                            std::valarray<std::size_t<(lengths,2),
                            std::valarray<std::size_t<(strides,2));
      foo[mygslice] = 0;
    
      std::cout << "foo:\n";
      for (std::size_t n=0; n<foo.size(); n++)
              std::cout << ' ' << foo[n];
      std::cout << '\n';
    
      return 0;
    }
    
    尝试一下
    输出
    
    0 0 2 0 4 0 6 7 0 9 0 11 0 13
    
  • 相关页面

    slice_array Valarray切片选择(类模板)
    mask_array Valarray遮罩选择(类模板)
    indirect_array Valarray间接选择(类模板)