Шаг 450.
Библиотека STL.
Числовые типы. Классы подмножеств элементов. Классы gslice и gslice_array

    На этом шаге мы приведем общие сведения об указанных классах.

    Объекты класса gslice_array создаются при передаче среза gslice в индексе неконстантного массива значений:

  namespace std {
    tempiate<class T> 
    class valarray { 
      public:
        .   .   .   .   .
        gslice_array<T> operator[] (const gslice&);
        .   .   .   .   .
    };
  }  

    Ниже приведено точное определение открытого интерфейса класса gslice:

  namespace std { 
    class gslice { 
      public:
        gslice ();  // Пустое подмножество
        gslice (size_t start,
                  const valarray<size_t>& size, 
                  const valarray<snze_t>& stride);

        size_t start() const; 
        valarray<size_t> size() const; 
        valarray<size_t> stride() const;
    };
  }

    Конструктор по умолчанию создаст пустое подмножество. Функции start(), size() и stride() предназначены для получения свойств обобщенного среза. Класс gslice_array поддерживает следующие операции:

namespace std {
    template <class T>
    class gslice_array {
      public:
        typedef T value_type;

        void operator= (const T&);
        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;
        ~gslice_array();
      private:
        gslice_array();
        gslice_array(const gslice_array<T>&);
        gslice_array& operator= (const gslice_array<T>&);
        ...
    };
}

    По аналогии с классом slice_array класс gslice_array проектировался исключительно как внутренний вспомогательный класс для работы с обобщенными срезами, который должен оставаться невидимым для внешних пользователей. По этой причине все конструкторы и операторы присваивания класса gslice_array<> объявлены закрытыми.

    На следующем шаге мы рассмотрим класс mask_array.




Предыдущий шаг Содержание Следующий шаг