Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
###Cpp_лкц1_1.09_11_#дляБАК#29_01_12.doc
Скачиваний:
40
Добавлен:
29.04.2019
Размер:
6.42 Mб
Скачать

Часть III. Стандартная библиотека

В классе val array определены конструкторы, позволяющие создавать пустой массив и массив, заполненный одинаковыми или заданными значениями:

tempiate<class T> class valarray{ public:

// Массив нулевого размера:

valarrayO:

// Массив из п элементов (к каждому применяется

// конструктор по умолчанию: explicit valarray(size_t n);

// Массив из п элементов со значением v: valarray(const T& v, size_t n);

// Массив из п элементов со значениями из массива т: valarray(const Т* m, size_t n);

// Конструктор копирования

valarray(const valarray&):

// Массив со значениями из среза:

valarray(const slice_array<T>&):

// Массив со значениями из обобщенного среза:

valarray(const gslice_array<T>&);

// Массив со значениями из подмножества:

valarray(const mask_array<T>&):

// Массив со значениями из indirect_array:

valarray(const indirect_array<T>&):

Примеры создания массивов:

valarray <double> vl; // Пустой массив

valarray <int> v2(100): // Массив из 100 элементов,

// каждый по умолчанию обнулен

valarray <int> v3(5. 100): // Массив из 100 элементов, равных 5

const int m = {4, 4, 3, 6. 2};

valarray <int> v4(m, 5): // Массив из 5 элементов: 4,4,3,6,2

В массивах определены операции доступа по индексу и присваивания:

Т operator[](size_t) const:

Т& operator[](size_t):

// Копирование массива:

valarray<T>& operator=(const valarray<T>&);

// Присваивание одного и того же значения всем элементам:

valarray<T>& operator=(const T&):

// Присваивание подмножеств массиву valarray:

valarray<T>& operator=(const slice_array<T>&):

valarray<T>& operator=(const gslice_array<T>&):

valarray<T>& operator=(const mask_array<T>&):

valarray<T>& operator=(const indirect_array<T>&); Нумерация элементов массива valarray начинается с 0. Проверка выхода за пределы диапазона не производится.

Глава 15. Средства для численных расчетов

373

Кроме приведенных выше, определены операции обобщенной индексации, или извлечения подмассивов из valarray1:

valarray<T> operator[](slice) const;

slice_array<T> operator[](slice);

valarray<T> operator[](const gslice&) const;

gslice_array<T> operator[](const gslice&);

valarray<T> operator[](const valarray<bool>&) const;

mask_array<T> operator[](const valarray<bool>&);

valarray<T> operator[](const valarray<size_t>&) const;

indirect_array<T> operator[](const valarray<size_t>&);

Формы операций с const возвращают подмножество как новый массив типа val array, а формы без const — как массив соответствующего типа.

Определены унарные операции +, -, ~ и !, бинарные операции +, -, *, /, %, Л, &, |, «, », а также соответствующие сложные присваивания (+=, *= и т. д.), вторым операндом которых может быть как число, так и массив, например:

valarray<T>& operator+= (const T&): valarray<T>& operator+= (const valarray<T>&);

В первом случае каждый элемент массива увеличивается на заданное число, а во втором выполняется почленное сложение соответствующих элементов двух массивов. Операции применимы к массивам, для элементов которых они являются допустимыми. Если размеры массивов, участвующих в операции, не совпадают, результат не определен. Операции « и » обозначают поразрядный сдвиг каждого элемента (то есть не сдвиг элементов и не ввод/вывод).

Примеры:

v4 += 1: // Результат - 5,5,4,7,2 (v4 описан выше)

v2 += v3; // v2[i] = v2[i] + v3[i] для i = 1 100

v4 »= 1: // Результат - 2,2,2,3,1

В классе val array определены следующие методы:

size_t sizeO const; // Размер массива

T sum() const; // Сумма элементов

Т min() const; // Наименьшее значение

Т maxO const; // Наибольшее значение

// Логический сдвиг на i элементов (влево, если i>0):

valarray<T> shiftdnt i) const;

// Циклический сдвиг на i элементов (влево, если i>0):

valarray<T> cshift(int) const;

// Применение функции func к каждому элементу массива:

valarray<T> apply(T func(T)) const;

valarray<T> apply(T func(const T&)) const;

II повторная инициализация (все элементы заменяются на

// значение по умолчанию, размер вектора - sz:

void resize(size t sz. Т с = TO);

1 Пояснения действия этих операций даны в следующем разделе.

374