现在的位置: 首页 > 综合 > 正文

动态数组(一维驾驭高维数组)

2013年09月14日 ⁄ 综合 ⁄ 共 4908字 ⁄ 字号 评论关闭

好的 coder 總是有辦法以 1D array 來駕馭高維陣列操作,
但有時使用高維陣列,可讓 code 中的邏輯概念更加清晰。
早期的 C 或目前的 C++ 中,無動態陣列配置的語法,
(在 C99 中才有,例如 gcc 可編譯動態陣列)
因此需要自己實現,底下是我的簡單作法:

設計陣列配置時有 3 點需考量:

1. 配置效率: 最好只呼叫一次 malloc 或 new。
2. 存取效率: 存取速度必須逼近 primary array。
3. 語意: array 的記憶體必須連續分佈。
   (所以 vector< vector > 不能算是真正的陣列,
   只是個 array container... )

N維動態陣列配置較複雜,先從二維的寫起:

(1) 使用 C 語言:

(2) 使用 C++:

依照相同概念,繼續擴展到 N 維:

C 語言寫法: (此 code 由曾侃的程式修改而來)

C++ 寫法:

C++ 動態多維陣列目前最有效率的實作是... 暴力法.... 
也就是用 template 由 1 維一直特製化到 N 維,
此法速度等同 build-in array,亦是 boost::multi_array 的 4~5 倍..
底下另取它徑,實作一個動態陣列的變形,
改以 array (D1, D2, ...) 的形式來存取陣列元素:

為了模擬陣列語法,只好再加些又長又醜陋的碼,
於是現在可以用 arr (D1,D2,..Dn) 與 arr [D1][D2]..[Dn]
兩種方法來存取陣列了~

 

抱歉!评论已关闭.