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