Я обновляю старое приложение, которое использует числовые рецепты dmatrix
довольно широко. Поскольку одна из причин, по которой я работаю над приложением, заключается в том, что его код собирается открыть, я хочу заменить весь код «Числовые рецепты» кодом, который можно свободно распространять.
dmatrix
это функция, которая возвращает матрицу чисел Вызываемый предоставляет нижнюю и верхнюю границу для каждого индекса, вот так:
double **mat = dmatrix(1,3,1,3);
mat
теперь имеет 3 строки от 1 до 3 и 3 столбца от 1 до 3, так что mat[1][1]
это первый элемент и mat[3][3]
последний
Я посмотрел на различные реализации матрицы C ++, ни одна из них не позволила мне указать нижнюю границу каждого измерения. Есть ли что-то, что я могу использовать, или я должен написать еще один класс матрицы для этого?
Я считаю, что вы можете легко сделать обертку из какой-то другой реализации матрицы, чтобы добавить функцию нижней границы. Пример (не проверено):
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];
}
};
Это может потребовать немного более надежной реализации в зависимости от вашего варианта использования. Но это основная идея, расширить ее.