2014-03-14 4 views
1

나는 gridded 데이터를 다루는 코드를 3d로 작성하고있다 (boost :: multi_array와 vtkImageData). 나는 중첩 된 루프를 가지고 있음을 발견했다.3d 배열 인덱스 반복자

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)){ ... } 

부스트 :: multi_array 요소를 통해 반복 할 수 있지만, 3D 인덱스가 명시 적으로 백 계산해야합니다

목표는 유사 뭔가를 작성하는 것입니다. 나는 또한 boost : iterator를 살펴 봤고 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를 사용하려고 할 수 있습니다.