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

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

    Следующая программа представляет собой полноценный пример использования срезов:

// pr435_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);

  // первый столбец = второй столбец,
  // возведенный в степень третьего столбца
  va[slice(0,4,3)] = pow (valarray<double>(va[slice(1,4,3)]),
                          valarray<double>(va[slice(2,4,3)]));

  cout << "Исходный массив после возведения в степень:\n"; 
  printValarray (va, 3);

  // Создание массива значений valarray с троекратным повторением
  // третьего элемента va
  valarray<double> vb(va[slice(2,4,0)]);

  // Умножение третьего столбца на элементы vb
  va[slice(2,4,3)] *= vb;

  cout << "Исходный массив после умножения:\n"; 
  printValarray (va, 3);

  // Вывод квадратных корней из элементов второй строки
  printValarray (sqrt(valarray<double>(va[slice(3,3,1)])), 3);

  // Удвоение элементов третьей строки
  va[slice(2,4,3)] = valarray<double>(va[slice(2,4,3)]) * 2.0;

  cout << "Исходный массив после всех преобразований:\n"; 
  printValarray (va, 3);


  getch();
  return 0;
}
Текст этого примера можно взять здесь.

    Результат выполнения программы выглядит так:


Рис.1. Результат работы приложения

    На следующем шаге мы рассмотрим обобщенные срезы.




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