[C++] 2차원 배열과 벡터의 동적 할당
2023. 9. 6. 18:00ㆍ프로그래밍 언어/C++\C
1차원 배열의 동적 할당
new [] 연산자를 사용하여 동적으로 할당하고, delete [] 연산자를 사용하여 메모리를 해제한다.
// 동적으로 메모리 할당
데이터_타입* 포인터_이름 = new 데이터_타입[크기];
// 예시: int형 크기가 n인 동적 배열 할당
int* numbers = new int[n];
// 메모리 해제 (반드시 필요한 경우에만 사용)
delete[] numbers;
동적으로 할당된 배열은 필요에 따라 크기를 조절할 수 있다는 장점이 있다.
// 초기 크기로 동적 배열 생성
int initialSize = 5;
int* arr = new int[initialSize];
// 현재 크기 저장
int currentSize = initialSize;
// 새로운 크기 설정
int newSize = 10;
if (newSize > currentSize) {
// 더 큰 크기가 필요한 경우
// 새로운 메모리 할당
int* newArr = new int[newSize];
// 기존 데이터 복사
for (int i = 0; i < currentSize; ++i) {
newArr[i] = arr[i];
}
// 기존 메모리 해제
delete[] arr;
// 포인터 갱신
arr = newArr;
// 현재 크기 업데이트
currentSize = newSize;
}
2차원 배열 동적 할당
행과 열을 먼저 지정하고 메모리를 할당할 수 있다.
// 행 크기가 m이고 열 크기가 n인 2차원 동적 배열 할당
int** matrix = new int*[m];
for (int i = 0; i < m; ++i) {
matrix[i] = new int[n];
}
// 행 크기가 m이고 열 크기가 n인 2차원 동적 배열 해제
for (int i = 0; i < m; ++i) {
delete[] matrix[i];
}
delete[] matrix;
주의할 점은 메모리 해제 시 반드시 할당된 순서와 반대로 해제해야 한다는 것이다. 열의 크기는 일정하지만 행의 크기는 다르게 선언할 수 있다. 이를 가변 길이 행렬이라고도 한다.
데이터_타입** 배열_이름 = new 데이터_타입*[행_수];
for (int i = 0; i < 행_수; ++i) {
배열_이름[i] = new 데이터_타입[열_크기];
}
2차원 벡터 생성
// 크기가 MxN인 2차원 벡터 생성
vector<vector<int>> matrix(M, vector<int>(N));
위의 방식으로 2차원 벡터를 생성할 수 있다. 이때 행과 열의 크기를 모두 지정할 수도 있고 행의 크기만 지정할 수도 있다.
행의 크기만 지정하는 방법을 보자.
int rows = 3;
vector<vector<int>> matrix(rows);
// 각 행에 대해 열의 크기를 따로 지정
for (int i = 0; i < rows; ++i) {
int cols = i + 2; // 예시로 각 행마다 다른 열 크기를 설정
matrix[i].resize(cols);
}
// 또는 초기화된 값으로 각 행의 열 크기 설정
for (int i = 0; i < rows; ++i) {
int cols = initial_values[i].size(); // 초기값이 있는 경우 해당 행의 초기값 개수로 열 크기 설정
matrix[i].resize(cols);
for (int j = 0; j < cols; ++j) {
matrix[i][j] = initial_values[i][j]; // 초기값 할당
}
}
'프로그래밍 언어 > C++\C' 카테고리의 다른 글
[C++] Map vs Set vs Priority Queue (0) | 2023.12.07 |
---|---|
[C++] 이분 탐색 메서드 - binary_search, lower_bound, upper_bound (0) | 2023.09.07 |
[C++] 네임스페이스와 ::연산자 - 코드 구조화와 충돌 방지의 핵심 (0) | 2023.08.22 |
[C++] 문자열을 다룰 때 조심해야하는 이유 - 문자열 복사 (0) | 2023.08.21 |
[C++] 문자열의 기초부터 꼭 알아야 할 메서드들까지 (0) | 2023.08.21 |