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

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

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

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];
    } 
};

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

Другие вопросы по тегам