9차원 배열.
글쓴이: suncrunch / 작성시간: 월, 2008/09/08 - 4:56오후
안녕하세요.
9차원 배열을 사용하고 싶은데요.
0xc00000fd - stack overflow error가 발생해서요.
local memory에 저장이 안돼는 것 같아서
new를 통해 할당하려고 하는데 error가 발생해서 질문 드립니다.
9차원 배열 선언이 가능한가요?
class A {
int a,b;
}
A m_A[2][2][2][2][2][2][2][2][2];
이런식으로가 가능한건지 궁금합니다.
아니면
A *********m_A=new A[2][2][2][2][2][2][2][2][2];
이렇게 선언이 가능한지도요.
혹시 경험 있으신 분 답변 부탁드립니다.
감사합니다.
Forums:


무엇을 하시는데
무엇을 하시는데 9차원이 되는 배열이 필요하신가요?
다른 해결 방법을 찾아보시라고 권해드리고 싶네요..
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
으..음...
A m_A[2][2][2][2][2][2][2][2][2];
이건 가능하고요
2번째껀
저렇게 하시면 안돼고요..
할당하고 다시 또 안에 할당해야해요..
점점 세분화되서 쪼개지는 것이기 때문에..
동적할당으로는 저렇게 못할껄요...
일단 안돼서...
누구 이걸 멋지게 하는 방법 아시는 분 안계세요 ?
무식하게 아래와 같이 하면 안될 껀 없습니다만....
template이나... void *를 써서 좀더 generic하게 할 수 있는 방법이 없을까요 ?
아래는 그냥 날로 코딩한거네요.
9차원까지는 귀찮아서 안해봤지만 5차가 SIZE 10로 했는데 메모리 엄청나게 잡아 먹는군요.
10에 5승이니까 헐-_- 3 word X 10 ^ 5승만큼 메모리를 잡아먹네요.
장난 아닙니다.
Information ******p3 = new Information *****[SIZE]; for ( int i5 = 0 ; i5 < SIZE ; ++i5) { p3[i5] = new Information ****[SIZE]; for (int i4 = 0 ; i4 < SIZE ; ++i4 ) { p3[i5][i4] = new Information ***[SIZE]; for ( int i3 = 0 ; i3 < SIZE ; ++i3) { p3[i5][i4][i3] = new Information **[SIZE]; for ( int i2 = 0 ; i2 < SIZE ; ++i2) { p3[i5][i4][i3][i2] = new Information *[SIZE]; for ( int i1 = 0 ; i1 < SIZE ; ++i1) { p3[i5][i4][i3][i2][i1] = new Information [SIZE]; p3[i5][i4][i3][i2][i1]->x = i3; p3[i5][i4][i3][i2][i1]->y = i5; p3[i5][i4][i3][i2][i1]->z = i4; } } } } }STL Vector를 이용해 봤습니다.
9단계에는 template인자 명의 길이 제한에 훌쩍 넘어 버려 컴파일 자체가 안됩니다.
4단계는 잘되는 군요.
먼가 멋진게 없을까요 ?
9차원짜리 배열을
9차원짜리 배열을 쓰는 거 그자체로 이미 멋지지 않은것 같은데요-_-;
이미 처음 단계부터 9차원 배열을 생각하는것 자체가
무의미하기는 하지만..
재미있는 내용이네요 ㅋㅋㅋ
---------------------------------------------
svn + trac + my project --> success ???
---------------------------------------------
---------------------------------------------
git init
git add .
git commit -am "project init"
---------------------------------------------
template struct
template < typename T,int SIZE,unsigned int n > struct n_d_array { n_d_array < T,SIZE,n-1 > data[SIZE]; static const unsigned int dimension = n; static const unsigned int size = SIZE; n_d_array < T,SIZE,n-1 > & operator[](unsigned int index) { return data [ index ] ; } }; template < typename T,int SIZE > struct n_d_array < T,SIZE,1 > { T data[SIZE]; static const unsigned int dimension = 1; static const unsigned int size = SIZE; T& operator[](unsigned int index) { return data [ index ] ; } };사용법
struct A { int x; }; ... typedef n_d_array < A, 2, 9 > A_array_9d; /* A[2][2][2][2][2][2][2][2][2] type defined */ A_array_9d a; a[1][0][1][1][0][0][0][0][0].x = 0;단점은 항상 SIZE 가 일정한 중첩 array 밖에 만들지 못 합니다.
만약 A[10][2][10][5].. 이런게 선언하고 싶으시면 가능할지.. ( 안에 size 나 dimention 을 넣어두었지만, 임의의 저런 모양의 array 는 될지 저조차도 의문이군요. )
Neogeo - Future is Now.
Neogeo - Future is Now.
대단합니다.
이렇게 표현하고 싶어서 고민 중이었는데....
아마 물리학 그 언저리에서 실제로 쓰이는 것 같아(?)
고민했었는데...
제가 몰랐던 핵심이 바로
이렇게 끝을 알려줘야 재귀적인 template의 끝이 되는군요.
무자게 배워갑니다.
질문하신 분보다 제가 더 감사하네요.
아.......
template 에는 더
template 에는 더 재미있는 세계가 많답니다.
C++ template meta programming 과 modern c++ design 을 꼭 한번 보시기 바랍니다.
Neogeo - Future is Now.
Neogeo - Future is Now.
그냥 int *array_2_9 =
그냥
int *array_2_9 = (int*)malloc( 2*2*2*2*2*2*2*2*2 ); int *get_array_2_9(int p0,int p1, int p2,int p3,int p4,int p5,int p6,int p7,int p8){ return array+(p0<<0)+(p1<<1)+(p2<<2)+(p3<<3)+(p4<<4)+(p5<<5)+(p6<<0)+(p7<<7)+(p8<<8); }이렇게 사용하면 안될까요?
댓글 달기