[C++] 2차원 배열의 사용
방법#1 정적 할당
#include <iostream>
using namespace std;
int main()
{
int m = 3; // 가로 (열)
int n = 2; // 세로 (행)
int dp[n][m];
for (int i=0; i<n; i++)
{
for (int j=0; j<m; j++)
cout << dp[i][j] << ' ';
cout << '\n';
}
}
출력:
4196656 0 4196144 0 -1571034864 32764
중간에 쓰레기 값이 생긴다.
하지만 dp배열 선언시 다음과 같이 변경하면, 모두 0으로 초기화 된다.
int dp[2][3] = {0,};
출력:
0 0 0 0 0 0
방법 #2 동적할당
#include <iostream>
using namespace std;
int main()
{
int m = 3;
int n = 2;
int** dp = new int*[n];
for (int i=0; i<n; i++)
dp[i] = new int[m];
for (int i=0; i<n; i++)
{
for (int j=0; j<m; j++)
cout << dp[i][j] << ' ';
cout << '\n';
}
}
0 0 0 0 0 0
동적할당을 하면,
메모리해제도 꼭 해줘야 한다.
다음과 같이 하면 된다.
// 각 행에 동적할당된 int 배열 우선 메모리 해제
for (int i=0; i<n; i++)
delete [] dp[i];
// 행으로 사용했던 int* 배열을 해제
delete [] dp;
#방법 3 (STL에서 제공하는 vector 사용)
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int m = 3;
int n = 2;
vector< vector<int> > dp(n, vector<int>(m, 0));
for (int i=0; i<n; i++)
{
for (int j=0; j<m; j++)
cout << dp[i][j] << ' ';
cout << '\n';
}
}
참고:
동적 2차원 배열 https://code.i-harness.com/ko-kr/q/e4aef
동적할당과 정적할당 http://ghgus0702.tistory.com/11
STL vector 2차원 배열 사용: http://sunnyholic.com/93