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

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

    Начиная с этого шага, мы начнем описывать классы подмножеств элементов массивов значений. Но поскольку эти классы очень просты и поддерживают небольшое количество операций, будут приведены только их объявления с комментариями.

Классы slice и slice_array

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

  namespace std {
    template  <class T> 
    class valarray {
      public:
        .   .   .   .   .
        slice_array<T> operator[](slice);
        .   .   .   .   .
    };
  } 

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

  namespace std { 
    class slice { 
      public:
        slice ();  // Пустое подмножество
        slice (size_t start, size_t size, size_t stride);

        size_t start () const; 
        size_t size () const; 
        size_t stride () const;
    };
  }

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

    Класс slice_array поддерживает следующие операции:

namespace std {
    template <class T>
    class slice_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;
        ~slice_array();
      private:
        slice_array();
        slice_array(const slice_array&);
        slice_array& operator= (const slice_array&);
        ...
    };
}

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

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




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