Программирование >>  Операторы преобразования типа 

1 ... 172 173 174 [ 175 ] 176 177 178 ... 239


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



1 ... 172 173 174 [ 175 ] 176 177 178 ... 239

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика