2016-03-04 2 views
-3

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

+0

http://stackoverflow.com/a/3755221/14065 –

+0

Дубликат не отвечает на вопрос, поскольку я его интерпретирую, но он неопределенный. Что бы это ни стоило, учитывая сказанное «T a [4] [5] [6];», компилятор обычно создает эквивалент 'T _a [4 * 5 * 6]', с любым доступом к 'a [i] [j] [k] 'аналог к ​​_a [k + j * 6 + i * 6 * 5]'. Другими словами, элементы все еще смежны, и изменение самого правого индекса перемещается к соседнему элементу в памяти. –

ответ

-1

оператор Переопределение [], что возвращение объект с переопределенной oprator []

template<T> 
struct Matrix { 
    // initialization and access checking skipped 
    typedef std::vector<T> t_raw; 
    typedef std::vector<t_raw> t_col; 
    t_col m_mat; 
    struct Idx { 
    Matrix* mat; 
    size_t row; 
    T& operator[](size_t col) { 
     return this->mat->m_mat[ this->row ][col]; 
    }; 
    } 
    Idx operator[](size_t row) { 
    Idx idx; 
    idx.mat = this; 
    idx.row = row; 
    return idx; 
    }; 
    friend class Idx; 
}; 

Matrix<int> m; 
m[1][2] = 5; 
1

Учитывая к-размерность массива arr[n,1][n,2][n,3]...[n,k], индекс элемента в arr[x,1][x,2][x,3]...[x,k] является x,k + x,(k-1) * n,k + x,(k-2) * n,k * n,(k-1) + ... + x,1 * n,2 * n,3 * ... * n,k.

Смежные вопросы