multi_array는 다차원 정적배열을 지원하는 클래스이다.
이를 이용하는 다른 방법은 std::tr1::array 를 중첩해서 사용 하는 방법이 있는데, 이것을 좀 더 편하게 확장했다고 보면 되겠다.
std::tr::array에 관한 내용은 아래 링크를 참조해라
http://lunapiece.net/Article/476
아래는 multi_array와 중첩된 array에 관한 예제코드이다. 이것도 별 내용이 없다보니 그냥 코드 보여주는걸로 끝낸다.
#include <array>
#include <multi_array.hpp>
#include <cstdio>
using namespace boost;
int _tmain(int argc, _TCHAR* argv[])
{
//TR1의 Array를 이용한 Static Array of Array 구현
printf("std::tr1::array<std::tr1::array<int,20>, 10>\n");
std::tr1::array<std::tr1::array<int,20>, 10> Stdarr; //int[10][20] 선언
//10*20인데 선언시에는 숫자가 반대로 씌여지므로 헤깔린다!
for (int i = 0; i < 10; ++i)
{
for(int j = 0;j < 20; ++j)
{
Stdarr[i][j] = 1;
}
}
//boost::multi_array
printf("multi_array 사용\n");
multi_array<int, 2> MultiArray(extents[10][20]); //int의 2차원 배열 [10][20]을 선언. 템플릿 인자가 Type 과 차원을 나타냄.
for (int i = 0; i < 10 ; ++i)
{
for(int j = 0;j < 20; ++j)
{
MultiArray[i][j] = 2;
}
}
printf("multi_array 의 range 조정 \n");
//Pascal 처럼 배열의 인덱스를 변형 할 수 있는 기능을 제공한다.
typedef multi_array<int, 2>::extent_range range; //이름이 너무 길어서 ㅡ.ㅡ
multi_array<int, 2> MultiArray2(extents[range(1,4)][range(20,40)]);
//Pascal 과 비교하면 Array [1..4-1] of Array[20..40-1] of Integer 라고 할 수 있겠다.
for (int i = 1; i < 4 ; ++i)
{
for(int j = 20;j < 40; ++j)
{
MultiArray2[i][j] = 2;
}
}
return 0;
}