• “Мой код должен выглядеть очень похожим на описание массивов, изложенное в большинстве учебников по математике”.
• Это относится также к векторам, матрицам и тензорам.
• Проверка на этапах компиляции и выполнения программы.
• Массивы любой размерности.
• Массивы с произвольным количеством элементов в любой размерности.
• Массивы являются полноценными переменными/объектами.
• Их можно передавать куда угодно.
• Обычные операции над массивами.
• Индексирование: ()
• Срезка: []
• Присваивание: =
• Операции пересчета (+=
–=, *=, %= и т.д.). • Встроенные векторные операции (например, res[i] = a[i]*c+b[2]
• Скалярное произведение (res = сумма элементов a[i]*b[i]
inner_product).• По существу, обеспечивает автоматическое преобразование традиционного исчисления массивов/векторов в текст программы, который в противном случае вы должны были бы написать сами (и добиться, чтобы они были не менее эффективными).
• Массивы при необходимости можно увеличивать (при их реализации не используются “магические” числа).
Библиотека Matrix
Matrix. Библиотека Matrix не является частью стандарта ISO C++. Вы можете найти ее описание на сайте в заголовке Matrix.h. Свои возможности она определяет в пространстве имен Numeric_lib. Мы выбрали слово Matrix, потому что слова “вектор” и “массив” перегружены в библиотеках языка C++. Реализация библиотеки Matrix основана на сложных методах, которые здесь не описываются. 24.5.1. Размерности и доступ
Рассмотрим простой пример.
#include "Matrix.h"
using namespace Numeric_lib;
void f(int n1, int n2, int n3)
{
Matrix
// одна размерность
Matrix
// одна размерность
ad1(7) = 0; // индексирование ( ) в стиле языка Fortran
ad1[7] = 8; // индексирование [ ] в стиле языка C
Matrix
Matrix
ad2(3,4) = 7.5; // истинное многомерное
// индексирование
ad3(3,4,5) = 9.2;
}
Matrix
Matrix), вы должны указать тип элемента и количество размерностей. Очевидно, что класс Matrix является шаблонным, а тип элементов и количество размерностей представляют собой шаблонные параметры. В результате, передав пару шаблонных параметров классу Matrix (например, Matrix), получаем тип (класс), с помощью которого можно определить объекты, указав аргументы (например, Matrixad2(n1,n2) ); эти аргументы задают размерности. Итак, переменная ad2 является двумерным массивом с размерностями n1 и n2, которую также называют матрицей n1 на n2. Для того чтобы получить элемент объявленного типа из одномерного объекта класса Matrix, следует указать один индекс. Для того чтобы получить элемент объявленного типа из двумерного объекта класса Matrix, следует указать два индекса.Как и во встроенных массивах и объектах класса vector
Matrix индексируются с нуля (а не с единицы, как в языке Fortran); иначе говоря, элементы объекта класса Matrix нумеруются в диапазоне [0,max], где max — количество элементов. Matrix