|
Программирование >> Операторы преобразования типа
template <class Т> class valarray { public: Маскирование константного массива значений возвращает новый массив значений valarray<T> operator[] (const gsl1ce&) const; Маскирование неконстантного массива значений возвращает mask array mask array<T> operator[] (const valarray<bool>&); О Для класса mask array определены операторы присваивания (обычные и комбинированные), позволяющие модифицировать элементы подмножества. О Преобразования типа позволяют объединять маскированные массивы с другими массивами значений и подмножествами их элементов (см. с. 532). Следующая программа показывает, как использовать маскированные подмножества элементов; num/maskedl.cpp #include <1ostreamF #1nclude <valarray> using namespace std; Построчный вывод массива значений tempiate<class T> void printValarray (const valarray<T>& va. Int num) { for (1nt 1=0; 1<va.sl2e()/num; ++1) { for (Int j=0; j<num; ( cout va[1*num+j] ; cout endl; cout endl: Int maln() { /* Массив значений с 12 элементами * - четыре строки * - три столбца */ valarray<double> va(12); Заполнение массива значений for (int 1=0: 1<12: 1++) ( va[1] = 1: printValarray (va. 3); Присваивание 77 всем элементам, меньшим 5 va[va<5.0] = 77.0: Присваивание 100 всем значениям, большим 5. но меньший 9 va[va>5.0 && va<9.0] = valarray<double>(va[va>5.0 && va<9.0]) + 100.0: printValarray (va. 3); > Результат выполнент1Я программы выглядит так: ) 1 2 J 4 5 i 7 8 ) 10 11 П 77 77 П 77 5 L06 107 108 ) 10 11 Обратите внимание: тип числового значения, сравниваемого с массивом зна-1ений, должен точно соответствовать типу массива. Следовательно, попытка компиляции программы, в которой при сравнении с массивом значений double тспользуются значения int, завершится неудачей: /alarray<double> va(12); /a[va<5] - 77: ОШИБКА 1еречисляемые подмножества Четвертый и последний вариант онределения подмножеств элементов - пере-шсляемые подмножества. Подмножество элементов массива значений опреде-тяется простой передачей массива с индексами. При этом индексы не обязаны следовать в порядке сортировки и могут включаться в массив дважды. В остальном перечисляемые подмножества ничем пе отличаются от других юдмножеств массивов значений. Э Чтобы определить подмножество элементов массива значений, вы просто передаете массив с элементами типа size t в аргументе оператора [] массива значений. Э Если массив значений является константным, то полученное выражение определяет новый массив значений. Э Для неконстантных массивов значений полученное выражение определяет объект indirect array, представляющий набор элементов массива значений со ссылочной семантикой: namespace std { template <class Т> class indirect array: template <class Т> class valarray ( public: Индексирование константного массива значений возвращает новый массив значений valarray<T> operatorE] (const valarray<sl2e t>&) const: Индексирование неконстантного массива значений возвращает 1nd1rect array 1nd1rect array<T> operator[] (const valarray<sl2e t>&): О Для класса indirect array определены операторы присваивания (обычные и комбинированные), позволяющие модифицировать элементы подмножества. О Преобразования типа позволяют объединять перечисляемые подмножества с другими массивами значений и подмножествами их элементов (см. с. 532). Следующая программа показывает, как использовать перечисляемые подмножества элементов: num/indil.cpp #1nclude <1ostream> #1nclude <valarray> using namespace std; Построчный вывод массива значений template<class Т> void printValarray (const valarray<T>& va. int num) { for (Int 1=0: 1<va.s1ze()/num: 1++) ( for (int j=0: j<num: j++) { cout va[i*num+j] : cout endl: cout endl; Int mainO { Создание массива значений с 12 элементами valarray<double> va(12): Инициализация массива значениями 1.01. 2.02. ... 12.12 for (Int 1=0; 1<12; 1++) { va[1] = (1+1) * 1.01; pr1ntValarray(va.4): /* Создание массива индексов * - ВНИМАНИЕ: элементы должны относиться к типу s1ze t
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |