Числовые типы. Определение подмножеств по маске

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

   
Следующий способ позволяет определять подмножества элементов по маске - логическому выражению. Например, рассмотрим следующее выражение:

  va[va > 7]

   
В этом выражении показанное ниже подвыражение возвращает массив размера va, в котором для каждого элемента логический признак
указывает, превышает ли этот элемент 7:

  va > 7

   
Оператор индексирования при помощи этого логического массива определяет все элементы, для которых логическое выражение возвращает true.
Таким образом, следующая конструкция определяет подмножество элементов массива va, больших 7.

  va[va > 7]

   
В остальном маскированные массивы ничем не отличаются от других подмножеств.

  • Чтобы определить подмножество элементов массива значений, вы просто передаете массив логических значений в аргументе оператора []
    массива значений.
  • Если массив значений является константным, то полученное выражение определяет новый массив значений.
  • Для неконстантных массивов значений полученное выражение определяет объект mask_array, представляющий набор элементов массива
    значений со ссылочной семантикой:

    namespace std {
    	    template <class T>
    	    class mask_array;
    	    template <class T>
    	    class valarray {
    	      public:
    	        // Маскирование константного массива значений
    	        // возвращает новый массив значений
    	        valarray<T> operator[] (const gslice&) const;
    	
    	        // Маскирование неконстантного массива
    	        // значений возвращает mask_array
    	        mask_array<T> operator[] (const valarray<bool>&);
    	        ...
    	    };
    	}
    
  • Для класса mask_array определены операторы присваивания (обычные и комбинированные), позволяющие модифицировать элементы подмножества.
  • Преобразования типа позволяют объединять маскированные массивы с другими массивами значений и подмножествами их элементов (смотри 433 шаг).

   
На следующем шаге мы рассмотрим пример использования маскировааного множества.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий