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