프로그래밍 언어

[C++] 2차원 배열의 사용

소금보자기 2018. 11. 22. 09:16


방법#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