Шаг 439.
Библиотека STL.
Числовые типы. Пример использования маскированных подмножеств

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

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

// 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; // ОШИБКА

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




Предыдущий шаг Содержание Следующий шаг