Menu
Coddy logo textTech

요약 - 동적 배열 관리자

Coddy C++ 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 104개 중 17번째.

challenge icon

챌린지

쉬움

자체 메모리를 관리하고 필요할 때 자동으로 크기를 늘리는 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++ 컴파일러