황창호 님이 쓰신 글 :
: 2차원 array를 쓰고 싶거든요.
:
: 그런데, 그 array가 x * y 행렬이라 생각하면, y는 3으로 정해져 있어요.
:
: 무슨 말이냐면요,
:
: cin >> numOfBlock;
: int *given_block = new int[numOfBlock][3];
:
: 이렇게요.
:
: 이것도 에러가 나네요.
:
: 어떻게 고쳐야 할까요?
new와 delete를 사용한 동적 할당으로 다차원 배열을 만들고 삭제하는 방법은
상당히 귀찮습니다.
다음은 빌더 헬프에 있는 예제입니다.
// ALLOCATE A TWO-DIMENSIONAL SPACE, INITIALIZE, AND DELETE IT.
#include <exception>
#include <iostream>
using std::cout;
using std::endl;
void display(long double **);
void de_allocate(long double **);
int m = 3; // THE NUMBER OF ROWS.
int n = 5; // THE NUMBER OF COLUMNS.
int main(void)
{
long double **data;
try { // TEST FOR EXCEPTIONS.
data = new long double*[m]; // STEP 1: SET UP THE ROWS.
for (int j = 0; j < m; j++)
data[j] = new long double[n]; // STEP 2: SET UP THE COLUMNS
}
catch (std::bad_alloc) { // ENTER THIS BLOCK ONLY IF bad_alloc IS THROWN.
// YOU COULD REQUEST OTHER ACTIONS BEFORE TERMINATING
cout << "Could not allocate. Bye ...";
exit(-1);
}
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
data[i][j] = i + j; // ARBITRARY INITIALIZATION
display(data);
de_allocate(data);
return 0;
}
void display(long double **data)
{
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++)
cout << data[i][j] << " ";
cout << "\n" << endl;
}
}
void de_allocate(long double **data) {
for (int i = 0; i < m; i++)
delete[] data[i]; // STEP 1: DELETE THE COLUMNS
delete[] data; // STEP 2: DELETE THE ROWS
}
이 방법보다는 역시 STL의 vector나 deque을 사용한 방법을 권합니다.
C/C++ Tip'N Tricks에 올린 제 글을 참고하세요.
http://www.borlandforum.com/impboard/impboard.dll?action=read&db=cpp_tip&no=2
상당히 간단하다는 것을 알 수 있습니다.