C++ slice_array 类

  • 定义和用法

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

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

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

    gslice_array Valarray gslice选择(类模板)
    mask_array Valarray遮罩选择(类模板)
    indirect_array Valarray间接选择(类模板)