2016-03-04 120 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

相关问题