C++ indirect_array 类

  • 定义和用法

    template <class T> indirect_array;
    std::indirect_array 当与索引valarray一起使用时,此类用作valarray的下标运算符(operator [])返回的中间类型。它引用valarray中的元素,这些元素的索引包含在传递给下标运算符的对象中。该类型可转换为valarray(请参见valarray构造函数),从而产生一个包含所引用元素副本的新对象。
  • 声明

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

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

    slice_array Valarray切片选择(类模板)
    gslice_array Valarray gslice选择(类模板)
    mask_array Valarray掩码选择(类模板)