Как получить i, j-й элемент симметричной матрицы с помощью оператора [] - PullRequest
1 голос

У меня есть симметричная матрица, представленная как в этом вопросе ( Как хранить симметричную матрицу? ). И мне нужно получить элементы i, j, используя перегруженный оператор []

В приведенном выше вопросе есть несколько вариантов с методами, но не с оператором. Итак, я попытался найти что-то еще. Я видел, как это сделать на общей матрице, но нет информации о матрице, представленной в векторе

int fromMatrixToVector(int i, int j, int N)
{
   if (i <= j)
      return i * N - (i - 1) * i / 2 + j - i;
   else
      return j * N - (j - 1) * j / 2 + i - j;
}
template<typename T, int M, int N>
class SimMatrix
{
private:
    T a[N / 2 * (N + 1)];
    int k;

public:
    SimMatrix();
    //**************
    class Row{
    private:
        SimMatrix *m;
        int i;
    public:
        Row(SimMatrix *m, int i);
        T& operator[] (int j)
    };

    SimMatrix::Row operator[] (int i)
    {
        return Row(this, i);
    }
    //**************
...
    Row operator[] (int i);
   };
...