60. C++ 동적 배열

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 컨테이너를 사용하는 방식 모두 존재하며, 각 방식은 목적에 따라 선택하여 사용할 수 있습니다.

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

error: Content is protected !!
위로 스크롤