C 언어과정에 2차원 동적 배열 생성에 대한 글이 올라와서 C++에서는 vector를 이용하면 더 쉽게 하는 방법이 있어 글을 적습니다.

주의 : 다음은 기본자료형 int ,double 같은 경우에만 제대로 작동합니다.

C++에서는 표준라이브러리를 STL 이라고 부릅니다.  STL이 표준이기 때문에 윈도우즈, 리눅스를 가리지 않고 작동하고 컴파일러를 가리지 않아 매우 호환성 있는 코드를 작성할 수 있습니다.

다음과 같이 작성하면 됩니다.

[code]
#include <iostream>
#include <vector>

using namespace std;

int main()
{

        vector<vector<int> >vec2D;

        int i, j ;
        int count = 0;

        vec2D.resize(10);
        for(i=0; i < 10 ; i++)
        {
                vec2D[i].resize(10);
                for (j = 0 ; j < 10 ; j++)
                {
                        vec2D[i][j] = count++;
                }
        }

        for(i=0; i < 10 ; i++)
        {
                for (j = 0 ; j < 10 ; j++)
                {
                        cout<<vec2D[i][j] <<endl;
                }
        }


        return 0;
}
[/code]

여기서 주의 한 부분의
[code] vector< vector<int> > [/code]
부분입니다.
이 부분을 다음과 같이 사용하게 되면
[code] vector< vector<int>>
>> 가 쉬프트 연산자 이므로 다른 의미를 가지게 됩니다.
따라서  > > 라고 분명히 뛰어써야 합니다.
[/code]
실제로 값을 넣어주기 전
resize를 호출하므로 불편할 수 있습니다. 그래서 다음과 같은 조금은 복작한 선언 방법을 이용할 수 도 있습니다.

[code]
#include <iostream>
#include <vector>

using namespace std;

int main()
{

        int row = 10;
        int col = 10;
        vector< vector< int> > vec2D = vector<vector<int> >(row, vector<int>(col));

        int i, j ;

        int count = 0;

//        vec2D.resize(10);
        for(i=0; i < 10 ; i++)
        {
        //        vec2D[i].resize(10);
                for (j = 0 ; j < 10 ; j++)
                {
                        vec2D[i][j] = count++;
                }
        }

        for(i=0; i < 10 ; i++)
        {
                for (j = 0 ; j < 10 ; j++)
                {
                        cout<<vec2D[i][j] <<endl;
                }
        }


        return 0;
}
[/code]

당연한 말이지만 vector의 특성 때문에 메모리 해제 부분은 필요 없습니다.

다만 이 방법은 기본자료형 int, double 같은 경우에만 제대로 작동합니다. 유도형인 class 의 객체 생성에 이용하면 절대 안됩니다.  이 때는 smart pointer를 이용해야 되는데 스마트 포인터는 STL에 없으므로 실험해보지 못해 설명하지 못하겠내요.