матрица — Замените матрицу числового рецепта классом C ++

Я обновляю старое приложение, которое использует числовые рецепты dmatrix довольно широко. Поскольку одна из причин, по которой я работаю над приложением, заключается в том, что его код собирается открыть, я хочу заменить весь код «Числовые рецепты» кодом, который можно свободно распространять.

dmatrix это функция, которая возвращает матрицу чисел Вызываемый предоставляет нижнюю и верхнюю границу для каждого индекса, вот так:

double **mat = dmatrix(1,3,1,3);

mat теперь имеет 3 строки от 1 до 3 и 3 столбца от 1 до 3, так что mat[1][1] это первый элемент и mat[3][3] последний

Я посмотрел на различные реализации матрицы C ++, ни одна из них не позволила мне указать нижнюю границу каждого измерения. Есть ли что-то, что я могу использовать, или я должен написать еще один класс матрицы для этого?

1

Решение

Я считаю, что вы можете легко сделать обертку из какой-то другой реализации матрицы, чтобы добавить функцию нижней границы. Пример (не проверено):

class Matrix {
OtherMatrix m;
int lowerX, lowerY;
public:

Matrix(int lx, int hx, int ly, int hy) :
m(hx-lx, hy-ly),
lowerX(lx), lowerY(ly) { }

MatrixCol operator[] (int x) {
return {this, x};
}
};

class MatrixCol {
friend class Matrix;
Matrix* mm;
int x;
public:
double& operator[] (int y) {
return mm->m[x - mm->lowerX, y - mm->lowerY];
}
};

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

1

Другие решения


По вопросам рекламы [email protected]