На этом шаге мы приведем пример использования этого способа задания подмножеств.
Следующая программа показывает, как использовать маскированные подмножества элементов:
// pr439_1.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <iostream> #include <valarray> #include <conio.h> //необходимо для getch() using namespace std; // Построчный вывод массива значений template<class T> void printValarray (const valarray<T>& va, int num) { for (int i=0; i<va.size()/num; ++i) { for (int j=0; j<num; ++j) { cout << va[i*num+j] << ' '; } cout << endl; } cout << endl; } int _tmain(int argc, _TCHAR* argv[]) { locale::global(locale("rus")); // Массив значений с 12 элементами // - четыре строки // - три столбца valarray<double> va(12); // Заполнение массива значений for (int i=0; i<12; i++) { va[i] = i; } cout << "Исходный массив:\n"; 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; cout << "Массив после преобразований:\n"; printValarray (va, 3); getch(); return 0; }
Результат выполнения программы выглядит так:
Рис.1. Результат работы приложения
Обратите внимание: тип числового значения, сравниваемого с массивом значений, должен точно соответствовать типу массива. Следовательно, попытка компиляции программы, в которой при сравнении с массивом значений double используются значения int, завершится неудачей:
valarray<double> va(12);
va[va<5] =77; // ОШИБКА
На следующем шаге мы рассмотрим перечисляемые подмножества.