2011-01-26 4 views
0

데이터를 3D 배열에 저장하고 조정해야하는 C++ 프로그램을 작성하려고합니다. 크기는 사용자가 지정하며 실행하는 동안 변경되지 않으며 복잡한 행렬 작업을 수행 할 필요가 없습니다. 주어진 3D 좌표에서 설정하고 얻는 데 최적화되어 있어야합니다. (모든 멤버에 걸쳐 반복 작업을 수행합니다. 큰 배열입니다.) 배열을 정의하는 가장 좋은 방법은 무엇입니까? 벡터 벡터의 벡터? 벡터 배열? 멀티 채널 CvMat/IplImage? 내가 3D로 유지해야할까요, 아니면 하나의 매우 긴 인터리브 벡터로 바꾸고 인덱스를 적절히 계산해야합니까?C++의 효율적인 다차원 데이터 저장

감사합니다.

+0

3D 배열의 크기는 어느 정도입니까? 얼마나 조밀 한 (또는 드문 드문)가? 메모리 사용이 염려 되나, 아니면 최고의 런타임 성능을 찾고 있습니까? –

답변

0

효율적으로 무엇을 의미 하느냐에 따라 다르지만, KD Trees을 보셨습니까?

2

마지막 옵션 인 변형 된 인덱스가있는 단일 대형 배열을 사용합니다. 알려진 인덱스를 읽고 쓰고 싶다면 저장 및 속도면에서 가장 효율적인 구조 일 것입니다. 이것을 클래스로 랩핑하고 예를 들어 operator()에 오버로드하여 3D 좌표에 쉽게 액세스 할 수 있습니다. 당신은 a(1,2,3) = 10;이라고 쓸 수 있고, 오버로딩 된 연산자는 3D 좌표를 선형 인덱스로 바꾸는 데주의를 기울일 수 있습니다. 그러한 배열을 반복하는 것은 하나의 차원이 있기 때문에 매우 간단합니다.