C++ 동적 배열
1. 개요
1.1 문서 개요
이 문서는 C++에서 동적 배열을 구현하고 사용하는 방법에 대해 기록하는 문서입니다. 동적 배열은 크기가 고정된 정적 배열과 달리 런타임에 메모리를 할당하여 크기를 유연하게 조정할 수 있는 자료 구조입니다. 메모리 할당 연산자인 new
, delete
와 함께 STL의 vector
등도 동적 배열의 형태로 분류됩니다.
2. 내용
2.1 new/delete를 사용한 동적 배열
2.1.1 배열 생성
int* arr = new int[5];
for (int i = 0; i < 5; ++i) {
arr[i] = i * 10;
}
2.1.2 배열 삭제
delete[] arr;
2.1.3 메모리 재할당 (수동 구현)
C++의 기본 new
연산자는 크기 변경을 직접 지원하지 않으므로, 새로운 배열을 생성하고 기존 데이터를 복사한 후 원래 배열을 해제해야 합니다.
int* oldArr = new int[5];
// ... 값 저장
int* newArr = new int[10];
for (int i = 0; i < 5; ++i) newArr[i] = oldArr[i];
delete[] oldArr;
oldArr = newArr;
2.2 vector를 사용한 동적 배열
C++ STL에서 제공하는 std::vector
는 메모리 자동 관리, 크기 자동 조절 등의 기능을 제공하는 동적 배열입니다.
2.2.1 기본 사용 예
#include <vector>
std::vector<int> vec;
vec.push_back(10);
vec.push_back(20);
2.2.2 크기 및 용량 조절
vec.resize(10); // 크기 조절
vec.reserve(20); // 용량 확보
2.2.3 반복자 사용
for (auto it = vec.begin(); it != vec.end(); ++it) {
std::cout << *it << std::endl;
}
2.3 동적 배열 사용 시 유의점
new[]
와delete[]
는 반드시 쌍으로 사용- 범위를 벗어난 인덱스 접근은 미정의 동작
vector
는 내부적으로new
를 사용하지만 자동 해제를 지원
3. 마무리
동적 배열은 런타임에 크기를 정할 수 있다는 유연성으로 다양한 프로그래밍 상황에서 활용됩니다. C++에서는 new/delete
를 직접 사용하는 방식과 vector
와 같은 STL 컨테이너를 사용하는 방식 모두 존재하며, 각 방식은 목적에 따라 선택하여 사용할 수 있습니다.