요약 - 동적 배열 관리자
Coddy C++ 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 104개 중 17번째.
챌린지
쉬움std::vector가 내부적으로 작동하는 방식과 마찬가지로, 필요할 때 자동으로 크기가 늘어나며 스스로 메모리를 관리하는 DynamicArray 클래스를 만들어 봅시다!
코드를 정리하기 위해 두 개의 파일을 생성합니다:
DynamicArray.h: 정수형 동적 배열을 관리하는DynamicArray클래스를 정의합니다. 클래스는 다음을 포함해야 합니다:- Private 멤버: 데이터 배열을 가리키는 포인터, 현재 크기(요소의 개수), 그리고 용량(할당된 공간)
- 초기 용량(capacity)을 인자로 받아 힙(heap)에 배열을 할당하고, 크기(size)를 0으로 초기화하는 생성자
- 할당된 메모리를 해제하고
"DynamicArray destroyed"를 출력하는 소멸자 - 배열에 요소를 추가하는
push(int value)메서드. 배열이 가득 찼을 경우, 더 큰 새 배열을 할당하고 기존 요소를 복사한 뒤 이전 배열을 해제하여 용량을 두 배로 늘려야 합니다. - 주어진 인덱스의 요소를 반환하는
get(size_t index)메서드 - 현재 요소의 개수를 반환하는
getSize()메서드 - 현재 용량을 반환하는
getCapacity()메서드
main.cpp: 초기 용량과 추가할 값의 개수를 읽습니다. 그런 다음 그 개수만큼의 정수 값을 읽어DynamicArray에 각각 추가(push)합니다. 모든 값을 추가한 후, 다음을 출력합니다:"Size: <size>""Capacity: <capacity>""Elements: <e1> <e2> ..."(공백으로 구분된 모든 요소)
입력 형식은 다음과 같습니다:
- 첫 번째 줄: 초기 용량 (정수)
- 두 번째 줄: 추가할 값의 개수 (정수)
- 다음 줄들: 한 줄에 하나씩의 정수 값
크기를 조정할 때, 배열의 용량은 두 배가 되어야 합니다. 예를 들어, 용량 2로 시작하여 세 번째 요소를 추가하면 용량은 4가 되어야 합니다. 이는 RAII 원칙을 보여줍니다. 클래스가 생성자에서 메모리를 획득하고 소멸자에서 이를 해제함으로써 메모리 누수가 발생하지 않도록 보장합니다.
main.cpp에서 #include "DynamicArray.h"를 사용하여 헤더 파일을 포함하세요.
직접 해보기
#include <iostream>
#include "DynamicArray.h"
using namespace std;
int main() {
// 초기 용량 읽기
int initialCapacity;
cin >> initialCapacity;
// 추가할 값의 개수 읽기
int numValues;
cin >> numValues;
// TODO: 초기 용량으로 DynamicArray 생성하기
// TODO: numValues개의 정수를 읽고 각각을 배열에 push하기
// TODO: "Size: <size>" 출력하기
// TODO: "Capacity: <capacity>" 출력하기
// TODO: "Elements: <e1> <e2> ..." 출력하기 (모든 요소를 공백으로 구분)
return 0;
}