2014-03-14 60 views
1

我寫代碼處理柵格數據在3D(升壓:: multi_array中和vtkImageData)。我發現我有嵌套循環迭代器在三維數組索引

for(int i=0; i<shape[0]; i++){ 
    for(int j=0; j<shape[1]; j++){ 
     for(int k=0; k<shape[2]; k++){ 
     /* ... */ 
     } 
    } 
} 

在我的代碼更經常比我審美喜歡;什麼是寫這個使用迭代器拿在固定大小的數組(如boost::array)三個指數的正確方法?

的目標是寫一個類似於:

for(boost::array<int,3> ijk: GridIndicesIterator(shape)){ ... } 

的boost :: multi_array中允許通過元素迭代,但3D指數必須明確回算。我也看過boost :: iterator,看起來正確編寫迭代器代碼是一件很有意義的事情。

回答

0

一種選擇是使用迭代器模式。你可以檢查這個link。您可以考慮爲每個維度添加迭代器並遍歷它們。您也可以考慮將operator()作爲參數傳遞給迭代器類並執行所需的操作。

0

如果繼續使用這個

for(int i=0; i<shape[0]; i++){ 
    for(int j=0; j<shape[1]; j++){ 
     for(int k=0; k<shape[2]; k++){ 

模式的時候,你可以嘗試使用的#define,而不是這是很容易。