본문 바로가기
Programing_Language/C++

2차원 동적 배열 할당과 해제 (배열 vs 벡터)

by neohtux 2020. 12. 7.
728x90

벡터를 애용하자

 

2차원 vector 선언

vector<vector<int>> v2; //2차원벡터 선언

vector<int> v1 //1차원 벡터 선언
v1.push_back(2);
v1.push_back(20);
v1.push_back(337);

//v2[0][0] == 2, v2[0][1] == 20, v2[0][2] == 337
v2.push_back(v1); 

 

 

2차원 vector 초기화

//5x10 0으로 초기화시키기 (10열의 각 원소가 0인 배열을 5줄(행) 만든다.)
vector<vector<int>> v(5, vector<int>(10,0));

//5x5 순환 접근 2차원 배열과 똑같다.
for(int i=0; i<5;++i) //행 크기
	for(int j=0; j<5;++j) //열 크기
		int val = v[i][j] 


//5x2 0으로 초기화시키기 (2열의 각 원소가 0인 배열을 5줄(행) 만든다.)
vector<vector<int>> v2(5, vector<int>(2,0));


VS C 스타일의 동적 배열

2차원 동적 배열 할당

char** allocMat(size_t row, size_t col) { 
    //x , y 는 각각 행과 열을 뜻한다. 
    //행 할당
    char** arr = new char* [row]; 
    
    //각 행에 열의 갯수만큼 할당
    for (int i = 0; i < row; ++i)
        arr[i] = new char[col];
    
    return arr; 
}

 

2차원 동적 배열 해제

void releaseMat(char** arr, int row) {
    for (int i = 0; i < row; ++i)
    {
        delete[] arr[i]; //i(행)번째 하위 배열을 해제한다. 
    }

    delete[] arr; //첫 번째 배열을 해제
    arr = nullptr;
}


-> C 스타일의 동적 배열은, 할당과 해제 구현의 번거로움도 있지만,
벡터를 사용하게 되면 사용 편의성과 메모리 컨트롤시 실수 하는 위험을 줄여준다.

300x250

댓글