2016-03-04 50 views
-3

我已經搜索了關於n維數組中的映射函數,但沒有找到特別的答案。我想知道多維數組是如何工作我的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返回Object []

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

鑑於一個k維數組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